WCF中相同服务的两个端点,一个不受保护

nas*_*ash 9 .net c# wcf iis-6

我有一个在IIS 6和WCF上运行的.Net服务,我想为它创建两个端点.一个使用HTTPS和基本身份验证进行保护,这些身份验证将从我们的DMZ和一个没有安全性的端点进行访问,只能从内部安全网络访问.防火墙和.Net过滤器将确保在安全网络外无法访问不安全的服务.

到目前为止,我还没有成功地让两个端点使用不同的安全参数.我尝试过的一种配置是:

<service name="My.Service">
    <host>
        <baseAddresses>
            <add baseAddress="http://localhost/MyService/"/>
        </baseAddresses>
    </host>
    <endpoint address="UnSecuredAccessToMyService.svc" 
              behaviorConfiguration="restBehavior" 
              name="UnSecureEndpoint" 
              binding="webHttpBinding"
              bindingName="SomeBindingName" 
              bindingNamespace="http://mydomain/myservice" 
              contract="Domain.MyService.MyClass" />
    <endpoint address="SecuredAccessToMyService.svc"
              behaviorConfiguration="secBehavior"
              name="SecuredEnpoint"
              binding="webHttpBinding"
              bindingConfiguration="customSecureBinding"
              bindingName="SecBindingName"
              bindingNamespace="http://mydomain/myservice"
              contract="Domain.MyService.MyClass" />
</service>

<behaviors>
    <endpointBehaviors>
        <behavior name="restBehavior">
            <webHttp />
        </behavior>
        <behavior name="secBehavior">
        </behavior>
    </endpointBehaviors>
</behaviors>

<bindings>
    <webHttpBinding>
        <binding name="customSecureBinding">
            <security mode="Transport">
                <transport clientCredentialType="Basic"/>
            </security>
        </binding>
    </webHttpBinding>
</bindings>
Run Code Online (Sandbox Code Playgroud)

UnSecuredAccessToMyService.svc和SecuredAccessToMyService.svc文件如下所示:

<%@ ServiceHost
    Factory="somefactory, anotherfactory"
    Service="My.Service, AnotherService"
%>
Run Code Online (Sandbox Code Playgroud)

我是WCF和.Net的新手,所以额外的细节可以真正帮助,谢谢!

Pau*_*ner 7

看起来你的绑定和行为有点混乱了.尝试将配置更改为以下内容:

<services>

    <service name="My.Service">
        <endpoint address="UnSecuredAccessToMyService.svc" 
                  binding="webHttpBinding"
                  bindingNamespace="http://mydomain/myservice" 
                  contract="Domain.MyService.MyClass" />

        <endpoint address="SecuredAccessToMyService.svc"
                  binding="webHttpBinding"
                  bindingName="secureWebHttpBinding" 
                  bindingNamespace="http://mydomain/myservice"
                  contract="Domain.MyService.MyClass" />
    </service>

</services>

<bindings>
    <webHttpBinding>
        <binding name="secureWebHttpBinding">
            <security mode="Transport">
                <transport clientCredentialType="Basic"/>
            </security>
        </binding>
    </webHttpBinding>
</bindings>
Run Code Online (Sandbox Code Playgroud)

这指定两个端点应该使用WebHttpBinding,但是一个将使用默认绑定,另一个将使用命名绑定"secureWebHttpBinding",其配置为使用传输层安全性(SSL)和基本客户端身份验证.

这些不应该需要进一步的配置或自定义行为,除非您有超出默认内置的需求.

不幸的是,很多WCF都是试错法调试,直到你确切地确定哪个元素没有正确运行.如果我给你的信息不起作用,请指出问题的更多症状,我会尝试提供进一步的帮助.