我开发了一个wcf服务,在两个不同的端点上公开了Contract1和Contract2两个契约。 当我要添加对我的客户端应用程序的引用时,它允许我使用这两个合同。
我如何限制客户端应用程序只使用一个合同?
这是我的web.config代码
<system.serviceModel>
<services>
<service behaviorConfiguration="MyWCFService.Service1Behavior"
name="MyWCFService.Service1">
<host>
<baseAddresses>
<add baseAddress="http://localhost:1010/Service1.svc"/>
</baseAddresses>
</host>
<endpoint address="/MyService1" binding="wsHttpBinding" contract="MyWCFService.IService1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="/MyService2" binding="wsHttpBinding" contract="MyWCFService.IService2" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyWCFService.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
提前致谢。
答案 0 :(得分:2)
为什么不将具有2个合同的单个Web服务端点分成两个不同地址的Web服务端点,每个合同一个合同,并且在您的客户端应用程序中只使用一个。
目前还不清楚为什么你的设计需要1个端点上的2个合同,只允许客户使用1个合同。
或者添加一些安全性,也许是一些相当基本的东西,例如将密码字段添加到合约中的方法签名,以便限制访问。
答案 1 :(得分:1)
我可以想到两种方式 -
第一种方法是使用防火墙阻止第二个服务URL。如果您选择不同的基址(可能是端口或主机头),将会有所帮助。另一种变化是将第二Web服务托管在不同的应用程序/网站中并阻止其进行外部访问。分离服务也是有意义的分离您的元数据(mex)端点 - 因为当前共享端点将发布两个服务的WSDL - 如果您不希望发布第二个Web服务的元数据(通过公共端点)没有意义它被他人消费。
第二种方式将依赖于Web服务安全性 - 实质上,使用未发布到外部方的凭据制作您的第二个Web服务。
答案 2 :(得分:0)
IIS基于IP提供有限的过滤服务。
Windows网络提供基于IP的有限过滤服务。
防火墙将提供您需要的任何过滤。
答案 3 :(得分:0)
我已经完成了以下解决方案..
为服务合约创建2个接口。让我们说IService1和IService2。
将这两个接口实现到服务类。让我们将其命名为service1
从Service1创建派生服务类。只是一个空白派生类。
在app.config中创建两个不同的服务元素
在第一个服务中,创建具有一些地址和绑定的终点并提供IService1作为合同。它将拥有自己的基地
使用一些不同的地址和绑定创建端点,并将IService2作为契约提供。它将拥有自己的基地址,这将是不同的。
现在根据您的选择将任何地址分享给客户。