2011-01-21 85 views
1

我已经开发了具有两个合同Contract1和Contract2暴露在两个不同端点的WCF服务消费WCF服务。 当我要添加对我的客户端应用程序的引用时,它允许我使用这两个合同。限制客户端应用程序上只有一个端点

我如何限制客户端应用程序只使用一个合同?

这里是我的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> 

感谢。

回答

2

为什么不2周的合同分为两个web服务端点上不同的地址以及每个1个合同打破单一的Web服务端点和客户端应用程序只使用一个。

它目前还不清楚为什么您的设计需要1个端点2周的合同,只允许客户使用1个合同。

或者增加一些安全性,也许一些非常基本的东西,如密码字段添加到方法签名中要限制访问合同。

+0

+1这是一个有效的解决方案。如果您不想将第二份合同暴露给第一份合同的客户,请不要在相同的服务中实施它们。这将为您节省大量的工作 - 更多的是在同一服务中实施这些合同可能没有附加价值。 – 2011-01-21 09:04:20

1

我能想到的两种方法 -

  1. 第一种方法是使用防火墙来阻止第二服务URL。如果您选择不同的基地址(可能是端口或主机标头),这将有所帮助。另一种变化是将第二个Web服务托管在不同的应用程序/网站中,并阻止它从外部访问。分离服务从分离元数据(mex)端点(也就是当前共享端点将为这两种服务发布WSDL)中分离服务也是有意义的 - 如果您不希望发布第二个Web服务的元数据(公共端点)它被其他人消费。

  2. 方式二要依赖于Web服务安全性 - 本质上,与未发布到外部各方的凭据让你的第二个Web服务。

0

IIS提供基于IP的有限过滤服务。

Windows网络提供有限的基于IP的过滤服务。

防火墙将提供您需要的任何过滤。

0

我也做了以下解决方案..

  1. 创建服务合同2个接口..假设IService1和IService2。

  2. 实现这些2个接口的服务类。让我们将其命名为service1

  3. 从Service1创建派生服务类。只是一个空白的派生类。

  4. 创建第一个服务的app.config

  5. 两个不同的服务元素,创造了一些地址终点和绑定,并提供IService1的合同。它将拥有自己的基地址

  6. 在第二个服务中创建具有不同地址和绑定的端点并提供IService2作为合同。它将有自己的基地址,这将是不同的。

现在根据您的选择将任何地址分享给客户。

相关问题