azh*_*lov 11 c# wcf proxy web-services svcutil.exe
我有多个共享一些数据协定的WCF服务,需要使用svcutil.exe生成客户端代码.我使用两种最明显的方法来解决错误并需要一些帮助.
但首先,这是服务:
[ServiceContract( Namespace = "http://www.me.com/services/" )]
public interface IFooService {
[OperationContract]
Response RunFoo( Request request );
}
[ServiceContract( Namespace = "http://www.me.com/services/" )]
public interface IBarService {
[OperationContract]
Response RunBar( Request request );
}
Run Code Online (Sandbox Code Playgroud)
响应和请求在单独的程序集中定义:
[DataContract( Namespace = "http://www.me.com/shared/" )]
public class Request {
[DataMember]
public int Input { get; set; }
}
[DataContract( Namespace = "http://www.me.com/shared/" )]
public class Response {
[DataMember]
public int Result { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这些服务以一些微不足道的方式实现,编译,发布 - 让我们现在切换到客户端.
在svcutil命令行中包含这两个服务 - 如下所示:
svcutil /o:Client.cs http://hostname.com/FooService.svc http://hostname.com/BarService.svc
Run Code Online (Sandbox Code Playgroud)
将导致大量有关重复数据类型的错误消息,从
错误:导出期间生成的架构存在验证错误:源:行:1列:9087验证错误:全局元素" http://schemas.microsoft.com/2003/10/Serialization/:anyType "已经已经宣布.
并以.结尾
错误:导出期间生成的架构存在验证错误:源:行:1列:12817验证错误:已声明complexType" http://www.me.com/shared/:Response ".
为每个服务单独生成客户端文件可以避免这些错误:
svcutil /o:Foo.cs http://hostname.com/FooService.svc
svcutil /o:Bar.cs http://hostname.com/BarService.svc
Run Code Online (Sandbox Code Playgroud)
但是,共享类型(例如请求和响应)的定义将在Foo.cs中重复,然后在Bar.cs中重复,从而导致编译器错误.
那么,生成消费此类服务的客户端代码的传统方法是什么?
限制:
好吧,基本上你可以
或者:
要么你可以分享共同的集会 - 或者你不能 - 我真的没有看到任何其他选择.
| 归档时间: |
|
| 查看次数: |
7023 次 |
| 最近记录: |