gpt4 book ai didi

c# - 如何为具有共享类型的多个 WCF 服务生成客户端代码

转载 作者:可可西里 更新时间:2023-11-01 08:44:43 24 4
gpt4 key购买 nike

我有多个共享一些数据协定的 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 );
}

Response 和 Request 在单独的程序集中定义:

[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; }
}

服务以一些简单的方式实现、编译、发布——让我们现在切换到客户端。

在 svcutil 命令行中包括这两个服务——像这样:

svcutil /o:Client.cs http://hostname.com/FooService.svc http://hostname.com/BarService.svc

将导致大量关于重复数据类型的错误消息,以

开头

Error: There was a validation error on a schema generated during export: Source: Line: 1 Column: 9087 Validation Error: The global element 'http://schemas.microsoft.com/2003/10/Serialization/:anyType' has already been declared.

结尾

Error: There was a validation error on a schema generated during export: Source: Line: 1 Column: 12817 Validation Error: The complexType 'http://www.me.com/shared/:Response' has already been declared.

为每个服务单独生成客户端文件可以避免这些错误:

svcutil /o:Foo.cs http://hostname.com/FooService.svc
svcutil /o:Bar.cs http://hostname.com/BarService.svc

但是共享类型(例如 Request 和 Response)的定义将在 Foo.cs 和 Bar.cs 中重复,显然会导致编译错误。

那么,生成使用此类服务​​的客户端代码的常规方法是什么

限制:

  • 无法将包含共享类型的程序集发送给客户端(以便他们可以使用 svcutil.exe 的/r 选项)
  • 无法在 Visual Studio 中使用“添加服务引用...”命令 - 需要 svcutil 命令行(或其他命令行工具)。

最佳答案

嗯,基本上你可以

  • 要么将您的共享类型放入一个单独的程序集中,供客户在生成客户端代码时使用(您已经认为这是不可能的)

或者然后:

  • 您必须分别为服务生成每个代理,并且每个服务都将获得自己的“请求”和“响应”类的“副本”

要么您可以共享公共(public)程序集 - 或者您不能 - 我真的没有看到任何其他选择。

关于c# - 如何为具有共享类型的多个 WCF 服务生成客户端代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2141195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com