我有一个要在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>

文件UnSecuredAccessToMyService.svc和SecuredAccessToMyService.svc如下所示:
<%@ ServiceHost
    Factory="somefactory, anotherfactory"
    Service="My.Service, AnotherService"
%>

我对WCF和.Net还是很陌生,所以额外的细节确实可以帮上忙,谢谢!

最佳答案

看起来您的绑定(bind)和行为有些困惑。尝试将您的配置更改为以下内容:

<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>

这指定两个端点都应使用WebHttpBinding,但是一个端点将使用默认绑定(bind),而另一个端点将使用已命名为“secureWebHttpBinding”的绑定(bind),该绑定(bind)被配置为使用传输层安全性(SSL)和基本客户端身份验证。

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

不幸的是,许多WCF都是反复试验式调试,直到您确切确定哪个元素无法正常运行为止。如果我提供给您的信息不起作用,请指定问题的更多症状,我们将尽力提供进一步的帮助。

关于c# - WCF中两个端点用于同一服务,一个端点保护一个不,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4206419/

10-11 21:42