当前位置:  开发笔记 > 编程语言 > 正文

如何从WCF服务返回用户定义的类型?

如何解决《如何从WCF服务返回用户定义的类型?》经验,为你挑选了1个好方法。

我在IIS中托管了WCF服务.目的是让客户进行调用并接收在另一个项目/ dll中定义的自定义类.我使用svcutil.exe生成了一个服务客户端.问题是这个自动生成的客户端包含我尝试从服务返回的类的新的部分/代理定义.它现在在编译时抛出我的原始自定义类和新的部分定义之间的转换错误.那么如何从WCF服务返回用户定义的类型?建议表示赞赏.



1> Andrew Hare..:

如果您要从服务调用返回的类型未标记为a,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必须将包含该类型的程序集的副本提供给客户端应用程序.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有