1

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

4 回答 4

2

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

不清楚为什么您的设计在 1 个端点上需要 2 个合约,只允许客户端使用 1 个合约。

或者添加一些安全性,也许是一些相当基本的东西,比如在你想要限制访问的合同中的方法签名中添加密码字段。

于 2011-01-21T08:52:45.237 回答
1

我可以想到两种方法——

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

  2. 第二种方式将依赖于 Web 服务安全性 - 本质上,使用未发布给外部各方的凭据创建您的第二个 Web 服务。

于 2011-01-21T08:33:54.103 回答
0

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

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

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

于 2011-01-21T08:37:20.373 回答
0

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

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

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

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

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

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

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

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

于 2017-01-25T23:16:22.323 回答