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