【发布时间】:2010-09-02 08:11:22
【问题描述】:
我有 wcf 网络服务。 Serice 当然实现了带有 ServiceContract 属性的接口。它还实现了另一个没有 ServiceContract 属性并存储在外部 dll 中的接口。当我生成代理时,我没有在代理对象中实现第二个接口。有没有办法让 svcutil 生成实现它的代理,或者我需要手动添加该代码?
问候
【问题讨论】:
标签: web-services wcf
我有 wcf 网络服务。 Serice 当然实现了带有 ServiceContract 属性的接口。它还实现了另一个没有 ServiceContract 属性并存储在外部 dll 中的接口。当我生成代理时,我没有在代理对象中实现第二个接口。有没有办法让 svcutil 生成实现它的代理,或者我需要手动添加该代码?
问候
【问题讨论】:
标签: web-services wcf
如果您在将包含代理的项目中添加对包含接口定义的程序集的引用,则代理生成工具将使用已知接口而不是生成自己的接口。
【讨论】:
这没有意义。如果接口未标记为 ServiceContract,则它不会在服务上公开,也无法从代理调用。如果您希望代理也实现接口,您还必须在代理中编写接口的实际实现(客户端!)=从服务中复制代码。最好的方法是不在服务中实现接口,而是使用帮助类,并在客户端和服务器之间共享这个类。您将只有一个实现,并且您将共享它。
【讨论】:
那是不可能的。实施会是什么样子?它应该只是从原始类中复制粘贴实现吗?如果要将方法公开为 Web 服务,则必须将它们放在具有 ServiceContract 属性的类或接口中。
假设原始服务类如下所示:
public class MyService : IServiceContract, IOtherInterface
{
...
public ObjectFromServiceAssembly MethodFromOtherInterface()
{
Console.WriteLine("Create instance of some object.");
return new ObjectFromServiceAssembly();
}
}
MethodFromOtherInterface 在生成的代理端看起来如何?它不能简单地从服务端复制您的实现。
【讨论】: