2010-11-17 8 views
9

Ich habe einen .Net-Dienst, der auf IIS 6 und WCF ausgeführt wird, für den ich zwei Endpunkte erstellen möchte. Ein Gerät mit HTTPS- und Basic-Authentifizierung, auf das von unserer DMZ aus zugegriffen wird, und ein Endpunkt ohne Sicherheit, auf den nur vom internen sicheren Netzwerk aus zugegriffen werden kann. Eine Firewall und möglicherweise .Net-Filter stellen sicher, dass der ungesicherte Dienst nicht außerhalb des sicheren Netzwerks zugänglich ist.Zwei Endpunkte für den gleichen Dienst in WCF, ein gesicherter Dienst nicht

Bisher war es nicht erfolgreich, zwei Endpunkte mit unterschiedlichen Sicherheitsparametern arbeiten zu lassen. Eine Konfiguration, die ich versuchte, ist:

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

Die Dateien UnSecuredAccessToMyService.svc und SecuredAccessToMyService.svc wie folgt aussehen:

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

Ich bin sehr neu in WCF und .Net so zusätzliche Details könnte wirklich helfen, Dank!

Antwort

7

Es sieht so aus, als ob Sie Ihre Bindungen und Verhaltensweisen ein wenig durcheinander gebracht haben. Versuchen Sie, Ihre Konfiguration auf die folgenden:

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

Diese beide Endpunkte sollten WebHttpBinding verwendet werden soll, aber man wird die Standardbindung und ein anderer wird verwendet, verwenden Sie eine benannte Bindung „secureWebHttpBinding“, die Transportschichtsicherheit konfiguriert ist, zu verwenden (SSL) und grundlegende Client-Authentifizierung.

Diese sollten keine weitere Konfiguration oder benutzerdefiniertes Verhalten erfordern, es sei denn, Sie haben Anforderungen, die über das hinausgehen, was standardmäßig integriert ist.

Leider ist viel WCF Test-und-Fehler-Debuggen, bis Sie genau identifizieren, welches Element nicht ordnungsgemäß funktioniert. Wenn die Informationen, die ich Ihnen gegeben habe, nicht funktionieren, geben Sie weitere Symptome für Ihr Problem an und ich werde versuchen, weitere Hilfe zu leisten.

+0

nicht _bindingNamespace_ wird *** httpS ***? Der URI (oder ** baseaddress **) ist _https: // mydomain/myservice__? – Kiquenet

+0

Ihr Namespace ist ein URI, der die XML-Elemente aus Ihren Service Binding-Metadaten eindeutig qualifiziert, damit sie eindeutig sind. Es kann ein beliebiger URI-Wert sein, aber normalerweise wird eine URL verwendet, um die Lesbarkeit zu verbessern.Das Schema http: // wird häufig verwendet, wenn Sie an diesem Ort eine Dokumentation bereitstellen möchten. –

1

Verwenden Sie die Konfiguration als

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

Beachten Sie, dass die Adresse = "UnSecuredAccessToMyService" und Adresse = "SecuredAccessToMyService" für Endpunkt Teil, der sehr wichtig ist. Nun, wenn Sie die URL von Client aufrufen benötigen Sie den URI als http://localhost/MyService/UnSecuredAccessToMyService.svc/UnSecuredAccessToMyService für ungesicherten Zugriff auf Anrufer- und http://localhost/MyService/UnSecuredAccessToMyService.svc/SecuredAccessToMyService für Gesicherter Zugriff.

Baseaddress sollte der vollständig qualifizierte Name .svc

unter Verwendung der obige Konfiguration einschließlich sein können Sie gleiche SVC-Datei, denselben Vertrag, gleiche Operation/Methode aber 2 verschiedenen Endpunkt verwenden, 1 sicher und 1 unsichere.

+0

Secure wird *** httpS ***? Der URI (oder ** baseaddress **) ist _https: // mydomain/myservice__? _ 'HTTPS: //localhost/MyService/UnSecuredAccessToMyService.svc'_ – Kiquenet