2010-11-17 18 views
9

İki uç nokta oluşturmak istediğiniz IIS 6 ve WCF üzerinde çalışan bir .Net hizmetim var. Biri, DMZ'mizden erişilebilen HTTPS ve Temel kimlik doğrulaması ve yalnızca dahili güvenli ağdan erişilebilecek bir güvenlik olmaksızın bir uç nokta ile güvenlik altına alınmıştır. Güvenlik duvarı ve belki .Net filtreleri, güvenli olmayan hizmetin güvenli ağın dışında erişilemediğinden emin olur.WCF'de aynı hizmet için iki uç nokta, biri güvenli değil

Şimdiye kadar farklı güvenlik parametreleriyle çalışan iki bitiş noktası elde etmeyi başaramadım. Denedim Bir yapılandırması geçerli:

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

dosyaları UnSecuredAccessToMyService.svc ve SecuredAccessToMyService.svc benziyor:

<%@ ServiceHost 
    Factory="somefactory, anotherfactory" 
    Service="My.Service, AnotherService" 
%> 

Ben WCF için çok yeni ve .Net ek ayrıntıların gerçekten yardımcı olabilecek, teşekkürler!

cevap

7

Bağlamalarınız ve davranışlarınız biraz karışmış gibi görünüyor. (Bu, her iki bitiş noktaları WebHttpBinding kullanmalıdır belirtir

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

, ama bir bağlayıcı varsayılan kullanacak ve başka irade Taşıma katmanlı güvenliği kullanmak üzere yapılandırılmış adlandırılmış bağlama "secureWebHttpBinding" kullandı: Aşağıdaki şekilde yapılandırmayı değiştirmeyi deneyin SSL) ve temel istemci kimlik doğrulaması.

Bunlar, varsayılan olarak yerleşik olanın ötesinde gereksinimleriniz olmadıkça başka yapılandırma veya özelleştirilmiş davranış gerektirmemelidir.

Ne yazık ki tam olarak hangi öğenin doğru şekilde çalıştığını belirleyene kadar çok sayıda WCF deneme yanılma hata ayıklamasıdır. Verdiğim bilgiler işe yaramıyorsa, sorununuzu daha fazla belirtin ve daha fazla yardım vermeye çalışacağım.

+0

_bindingNamespace_ *** httpS *** olacak? URI (veya ** baseaddress **) _'https: // mydomain/myservice'_? – Kiquenet

+0

Ad alanınız, XML öğelerini hizmet bağlama meta verilerinizden benzersiz şekilde nitelendiren bir URI'dur, dolayısıyla bunlar kesin değildir. Herhangi bir URI değeri olabilir, ancak tipik olarak bir insanın okunabilirliğini sağlamak için bir URL'den alır.Şema http: // genellikle bu konumda bir tür belge sağlamak istediğinizde kullanılır. –

1

Kullanım

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

Bildirimi olarak yapılandırma olduğunu adresi = "UnSecuredAccessToMyService" ve adresi = "SecuredAccessToMyService" çok önemli uç nokta bölümü için. Şimdi istemciden URI'yı aradığınız zaman sen Güvenli erişim için Teminatsız Erişim için http://localhost/MyService/UnSecuredAccessToMyService.svc/UnSecuredAccessToMyService ve http://localhost/MyService/UnSecuredAccessToMyService.svc/olarak SecuredAccessToMyService URI araman gerekiyor.

BaseAddress aynı .svc dosyanın aynı sözleşme, aynı operasyon/yöntem ama 2 farklı uç noktasını, 1 güvenli kullanabilmek için ve yukarıdaki yapılandırmayı kullanarak .svc

dahil tam adı olmalıdır 1 güvensiz.

+0

Güvenli *** httpS *** olacak? URI (veya ** baseaddress **) _'https: // mydomain/myservice'_? _'HTTPS: //localhost/MyService/UnSecuredAccessToMyService.svc'_ – Kiquenet

İlgili konular