限制客户端应用程序仅在一个端点上使用wcf服务

时间:2011-01-21 08:06:34

标签: c# wcf wcf-binding wcf-endpoint

我开发了一个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>

提前致谢。

4 个答案:

答案 0 :(得分:2)

为什么不将具有2个合同的单个Web服务端点分成两个不同地址的Web服务端点,每个合同一个合同,并且在您的客户端应用程序中只使用一个。

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

或者添加一些安全性,也许是一些相当基本的东西,例如将密码字段添加到合约中的方法签名,以便限制访问。

答案 1 :(得分:1)

我可以想到两种方式 -

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

  2. 第二种方式将依赖于Web服务安全性 - 实质上,使用未发布到外部方的凭据制作您的第二个Web服务。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我已经完成了以下解决方案..

  1. 为服务合约创建2个接口。让我们说IService1和IService2。

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

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

  4. 在app.config中创建两个不同的服务元素

  5. 在第一个服务中,创建具有一些地址和绑定的终点并提供IService1作为合同。它将拥有自己的基地

  6. 第二服务中的
  7. 使用一些不同的地址和绑定创建端点,并将IService2作为契约提供。它将拥有自己的基地址,这将是不同的。

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