作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个托管在 IIS 中的 WCF 服务。目的是让客户端进行调用并接收在另一个项目/dll 中定义的自定义类。我已经使用 svcutil.exe 生成了一个服务客户端。问题是这个自动生成的客户端包含我尝试从服务返回的类的新部分/代理定义。现在,它在编译时在我的原始自定义类和新的部分定义之间引发转换错误。那么如何从 WCF 服务返回用户定义的类型呢?感谢建议。
最佳答案
如果您想要从服务调用返回的类型未标记为 DataContract
,那么您将无法从 WCF 返回它,除非向您的客户端提供相同程序集的副本应用程序。
using System;
using System.ServiceModel;
[ServiceContract]
interface IService
{
[OperationContract]
TimeSpan GetTimeSpan();
}
class Service : IService
{
public TimeSpan GetTimeSpan() { return DateTime.Now.TimeOfDay; }
}
为什么前面的代码可以工作?它之所以有效,是因为服务调用的双方都有 System.dll
,因此它们都知道 System.TimeSpan
类型,这是 OperationContract GetTimeSpan( )
。
这是使用DataContract
的示例:
using System;
using System.ServiceModel;
using System.Runtime.Serialization;
[ServiceContract]
interface IService
{
[OperationContract]
Contract GetContract();
}
[DataContract]
class Contract
{
[DataMember]
public String MyProperty { get; set; }
}
class Service : IService
{
public Contract GetContract() { return new Contract(); }
}
现在您已经为您定义的类提供了序列化属性 (Contract
) - 这将允许您使用 svcutil.exe
在客户端应用程序中创建代理类将被序列化并发送到 WCF 服务。
现在,如果您想返回不是 DataContract
的类型,您必须向客户端应用程序提供包含该类型的程序集的副本。
关于.net - 如何从 WCF 服务返回用户定义的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/438669/
我是一名优秀的程序员,十分优秀!