【问题标题】:WCF service: Returning custom objectsWCF 服务:返回自定义对象
【发布时间】:2009-12-29 13:08:24
【问题描述】:

我在我的应用程序中使用 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>"

内部异常:

System.Net.WebException: "The underlying connection was closed. An unexpected error occured on receive"

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

【问题讨论】:

  • 你在哪里托管你的 wcf 服务?

标签: wcf


【解决方案1】:

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

[DataContract]
public class MyClass
{
    [DataMember]
    public string MyString {get; set;}
}

现在像这样改变你的服务接口:

[OperationContract]    
MyClass GetMyClass();  

还有你的服务:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 虽然我同意这是糟糕的设计,但我觉得 WCF 应该能够处理对象
    • "object" 是通配符。这意味着您可以退回任何东西。您需要使用ServiceKnownTypeAttribute 告诉 WCF 您可以返回什么样的东西。
    【解决方案3】:

    自定义对象很好,而 MS 说你不必再使用 [DataContract] 或 [datamember] 属性,没有它们我就没有成功。尝试用属性标记您的自定义对象并查看发生了什么。您可以通过打开跟踪并使用 svcutil 获取跟踪来获取有关明确发生的事情的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2010-12-15
      相关资源
      最近更新 更多