我在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的新手,因此额外的细节可以提供帮助,谢谢!
答案 0 :(得分: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>
这指定两个端点都应该使用WebHttpBinding
,但是一个端点将使用默认绑定,另一个端点将使用命名绑定“secureWebHttpBinding”,该绑定配置为使用传输层安全性(SSL)和基本客户端身份验证。 / p>
这些不应该需要进一步的配置或自定义行为,除非您有超出默认内置的需求。
不幸的是,很多WCF都是试错法调试,直到您确切地确定哪个元素无法正常运行。如果我给你的信息不起作用,请指出问题的更多症状,我会尝试提供进一步的帮助。
答案 1 :(得分:1)
将配置用作
<service name="My.Service">
<host>
<baseAddresses>
<add baseAddress="http://localhost/MyService/UnSecuredAccessToMyService.svc"/>
</baseAddresses>
</host>
<endpoint address="UnSecuredAccessToMyService"
behaviorConfiguration="restBehavior"
name="UnSecureEndpoint"
binding="webHttpBinding"
bindingName="SomeBindingName"
bindingNamespace="http://mydomain/myservice"
contract="Domain.MyService.MyClass" />
<endpoint address="SecuredAccessToMyService"
behaviorConfiguration="secBehavior"
name="SecuredEnpoint"
binding="webHttpBinding"
bindingConfiguration="customSecureBinding"
bindingName="SecBindingName"
bindingNamespace="http://mydomain/myservice"
contract="Domain.MyService.MyClass" />
</service>
请注意 地址=&#34; UnSecuredAccessToMyService&#34; 和 地址=&#34; SecuredAccessToMyService&#34; 对于端点部分非常重要。现在,当您从客户端调用URl时,您需要为不安全的访问调用URI http://localhost/MyService/UnSecuredAccessToMyService.svc/ UnSecuredAccessToMyService 安全访问的http://localhost/MyService/UnSecuredAccessToMyService.svc/ SecuredAccessToMyService 。
BaseAddress应该是完全限定的名称,包括 .svc
使用上述配置,您将能够使用相同的.svc文件,相同的合同,相同的操作/方法,但有2个不同的端点,1个安全和1个不安全。