Interface 引用程序集中的WCF重用类型不重用ServiceContract接口

Interface 引用程序集中的WCF重用类型不重用ServiceContract接口,interface,wcf,Interface,Wcf,我有四个独立的项目: MyUserControl-需要对实现IMyService MyService-实现IMyService mySharedInterface-包含IMyUserControl和IMyService MyWebApp 用户控件需要在运行时动态加载。这将实现IMyUserControl,并具有将在运行时设置的IMyService类型的属性 问题是,即使有重用类型的选项,MyWebApp也没有重用IMyService接口。它总是从服务引用再次生成它。如果我能将它转换到MySh

我有四个独立的项目:

  • MyUserControl-需要对实现
    IMyService

  • MyService-实现
    IMyService

  • mySharedInterface-包含
    IMyUserControl
    IMyService

  • MyWebApp

用户控件需要在运行时动态加载。这将实现
IMyUserControl
,并具有将在运行时设置的
IMyService
类型的属性

问题是,即使有重用类型的选项,MyWebApp也没有重用
IMyService
接口。它总是从服务引用再次生成它。如果我能将它转换到
MySharedInterfaces.IMyService
,我就不会有问题了,因为它应该是完全相同的


用户控件需要类型为
IMyService
的内容。是否可以将
WebServiceReference.IMyService
强制转换回
MySharedInterface.IMyService
或强制
WebServiceReference
重用
MySharedInterface.IMyService

您是否在MyUserControl中包含对MySharedInterface的引用?MySharedInterface是否引用了MyUserControl中未引用的其他程序集


困难的方法是不使用生成的服务引用,而是使用ChannelFactory。这将始终为您提供MySharedInterfaces的接口。

Matt,您完全可以自己完成创建客户端代理的“两步”过程-这真的不是什么大问题

在客户端应用程序中,参考
MySharedInterfaces
程序集。然后,为您的服务界面创建一个
ChannelFactory
实例:

ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>();
这不是一个非常昂贵的操作,所以您可以在每次进行服务呼叫之前都这样做,而不必担心出现故障的通道等等

client
还实现了
ICommunicationObject
接口,因此,如果您需要检查与WCF相关的内容,如频道的状态,可以强制转换您的客户端:

CommunicationState currentState = ((ICommunicationObject)client).State;

因此,您基本上拥有生成的客户端代理类的所有部分,但您可以更好地控制自己的操作。

感谢您的快速回复。MyUserControl项目引用MySharedInterfaces,MySharedInterfaces引用的内容中没有MyUserControl未引用的内容。目前这只是一个概念的证明,所以目前它是相当空的。上周是我第一次看WCF,所以我希望从简单的东西开始。不过我会读一读ChannelFactory的。出于好奇,为什么它不能重用IMyServiceInterface,而它可以重用其他所有东西?可能的重复请参见:
CommunicationState currentState = ((ICommunicationObject)client).State;