Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务:返回自定义对象_Wcf - Fatal编程技术网

WCF服务:返回自定义对象

WCF服务:返回自定义对象,wcf,Wcf,我正在应用程序中使用WCF服务。我需要在服务类中返回一个自定义对象。 方法如下: IService.cs: [OperationContract] object GetObject(); Service.cs public object GetObject() { object NewObject = "Test"; return NewObject; } 每当我调用该服务时,它都会抛出一个异常,并显示以下消息: System.ServiceModel.CommunicationE

我正在应用程序中使用WCF服务。我需要在服务类中返回一个自定义对象。 方法如下:

IService.cs:
[OperationContract]
object GetObject();

Service.cs
public object GetObject() 
{
  object NewObject = "Test";
  return NewObject;
}
每当我调用该服务时,它都会抛出一个异常,并显示以下消息:

System.ServiceModel.CommunicationException: "An error occured while receiving the HTTP response to <service path>"

我们不能从WCF服务返回对象类型或自定义对象吗?

您应该返回特定类型,而不是“对象”。“对象”可以是任何类型。

自定义对象很好,虽然MS说您不必再使用[DataContract]或[datamember]属性,但没有它们我就无法成功。尝试用属性标记自定义对象,看看发生了什么。通过打开跟踪并使用svcutil获取跟踪,您可以获得更多关于显式发生了什么的信息。

您应该返回一个用
DataContract
属性标记的类的实例:

[DataContract]
public class MyClass
{
    [DataMember]
    public string MyString {get; set;}
}
现在更改您的服务界面,如下所示:

[OperationContract]    
MyClass GetMyClass();  
以及您的服务:

public MyClass GetMyClass()      
{     
    return new MyClass{MyString = "Test"};     
} 

虽然我同意这是一个糟糕的设计,但我觉得WCF应该能够处理对象“object”是一个通配符。这意味着你可以退回任何东西。您需要使用
servicenknownTypeAttribute
告诉WCF您可以返回什么类型的内容。您的WCF服务在哪里托管?
public MyClass GetMyClass()      
{     
    return new MyClass{MyString = "Test"};     
}