C# 与Unity共享WCF服务合同
我是WCF的新手,我希望在一个解决方案中的服务和另一个解决方案中的服务消费者之间共享服务契约和数据契约。我创建了一个单独的项目,它在两个解决方案之间共享,其中包含服务契约和数据契约。当我引用我的服务时,数据契约是共享的,而不是服务契约。我的合同如下所示:C# 与Unity共享WCF服务合同,c#,wcf,unity-container,C#,Wcf,Unity Container,我是WCF的新手,我希望在一个解决方案中的服务和另一个解决方案中的服务消费者之间共享服务契约和数据契约。我创建了一个单独的项目,它在两个解决方案之间共享,其中包含服务契约和数据契约。当我引用我的服务时,数据契约是共享的,而不是服务契约。我的合同如下所示: [ServiceContract] public interface IDistributionService { [OperationContract] [ServiceKnownType(typeof (Distributi
[ServiceContract]
public interface IDistributionService
{
[OperationContract]
[ServiceKnownType(typeof (Distribution))]
bool AddDistributions(Distribution[] oDistributions);
}
当我查看reference.cs文件时,我正在使用分发对象,但它正在再次生成IDistributionService契约,下面是reference.cs文件的摘录:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="eDistributorService.IDistributionService")]
public interface IDistributionService {
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDistributionService/AddDistributions", ReplyAction="http://tempuri.org/IDistributionService/AddDistributionsResponse")]
bool AddDistributions(mhcb.syd.eDistribution.WebServices.Contracts.DTO.Distribution[] oDistributions);
}
有没有办法让使用者使用IDistributionService接口而不在reference.cs文件中生成具体实例
我想知道的主要原因是我可以使用依赖注入(unity)
.RegisterType(
新的拦截器(),
新的拦截行为(container.Resolve())
再次感谢 首先检查您是否指示服务参考工具“重用类型”。转到“添加服务引用…”时,单击“高级”,并确认选中了“在引用的程序集中重用类型”选项 如果选中此选项(我认为这是默认行为),那么您可能无法通过添加“服务引用”来完成所需的操作 共享契约是首选的WCF模式(在我看来),但我通常采用的实现是使用
ChannelFactory
类来实例化客户端连接,而不是使用生成的代理。生成的代理很好-它快速且简单-但它笨重且需要维护
查看上的此MSDN链接进行讨论,并查看此链接的示例用法。代码artefacts svcutil。但它们是迄今为止使用WCF提供的解耦最简单(即最便宜)的方法。重用契约和实体是服务和消费者的共同目标
如果您希望容器为WCF服务生成客户端代理,那么可以使用一个可以实现这一目的的。它还支持WCF4发现功能。您还可以通过搜索“ChannelFactory”找到大量在线资源和问题。
.RegisterType<IDistributionService, DistributionServiceClient>(
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior(container.Resolve<IInterceptionBehavior>()))