我可以从客户端隐藏http端点或https端点,具体取决于他们要使用的协议

时间:2011-11-22 16:36:10

标签: .net wcf exception-handling wcf-client wcf-configuration

我已按照此处的各种说明配置我的WCF服务以支持http和https。基本上,他们都非常指出我需要为每个协议复制我的端点,所以我的服务器配置如下:

<service behaviorConfiguration="MyApp.WebServices.ServiceBehavior" name="MyApp.WebServices.ServiceLibrary">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpsBinding" name="AuthenticationService" contract="MyApp.WebServices.IAuthenticationService" />

    <!-- HTTP enpoints -->
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicBinding" name="AuthenticationService" contract="MyApp.WebServices.IAuthenticationService" />
</service>

所以我有不同的绑定,一个用于http,一个用于https用于每个端点。

我的问题是当我使用Visual Studio 2010服务引用为此Web服务创建客户端时。我希望能够将服务引用指向:

http://mysite.com/myapp/servicelibrary.svc

https://mysite.com/myapp/servicelibrary.svc

我的理想情况是,如果服务引用使用http或https,则只有使用相同协议的相应端点才会被提取到客户端app.config文件中。实际上,如果我引用http servicelibrary,我会得到两对端点:

<client>
    <endpoint address="https://ip-0af84f03/myapp/ServiceLibrary.svc"
        binding="basicHttpBinding" bindingConfiguration="AuthenticationService"
        contract="Services.IAuthenticationService" name="AuthenticationService" />
    <endpoint address="http://mysite.com/myapp/ServiceLibrary.svc"
            binding="basicHttpBinding" bindingConfiguration="AuthenticationService1"
            contract="Services.IAuthenticationService" name="AuthenticationService1" />
</client>

因此,当我尝试从AuthenticationService访问函数时,我收到此错误:

  

无法加载合同“Services.IAuthenticationService”的端点配置部分,因为找到了该合同的多个端点配置。请按名称指明首选端点配置部分。

我知道我可以通过在我的客户端上从我的app.config手动删除不需要的重复端点来消除错误,但我的偏好是他们在设置服务引用时不首先显示。

这可能吗?

0 个答案:

没有答案