Frage

Ich habe eine kleine WCF Webservice bekommt die Arbeit mit dem eingebauten in WCF-Diensthost und mit der Visual Studio 2008-Hosting-Einbau-Entwicklung Web-Server.

ich diese Hosting enviroments ich auf der WCF-Testclient verlassen haben, um die Service-Methoden aufrufen.

Jetzt leite ich Probleme mit meiner nächsten Phase der Prüfung:

Ich habe es in IIS 5.1 auf meiner WinXP dev Maschine gehostet und ich denke, vielleicht das Problem ist, ich nicht WCF Test Client weiterhin mehr verwenden. Hier ist, was passiert:

Fall 1: "Anonymous Access" markiert (aktiviert)

WCF Test Client UI kommt richtig auf, webMethods und die INVOKE Taste auszusetzen. Doch wenn ich auf INVOKE es nicht mit einem Back-End-Datenspeicher (ein 3rd-Party-Produkt), das erfordert Windows-Authentifizierung zu verbinden. Ich kann den Fehler poste ich von der product.DLL zurück, aber ich glaube nicht, dass es relevant ist.

Fall 2: "Anonymous Access" ist un-checked (deaktiviert)

WCF Test Client UI nicht einmal richtig zu initialisieren. Meine Erforschung dieser sagt mir, dass MEX (WS-Metadata Exchange) erfordert "Anonymous Access" und (scheinbar) WCF Test Client erfordert MEX. Hier sind Schlüsselauszüge, die Fehler zurückgegeben werden:

Error: Cannot obtain Metadata from http://localhost/wcfiishost
The remote server returned an error: (401) Unauthorized.HTTP GET Error
URI: http://localhost/wcfiishost    
There was an error downloading 'http://localhost/wcfiishost'.    
The request failed with the error message:
Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service

Das ist viele Erklärungen von verbindlichen Optionen, Nachrichtensicherheit usw. und Sachen, die ich ehrlich gesagt nicht verstehen. Hier ist mein nehmen auf, wo ich bin, aber ich würde Ihre Meinung lieben:

(a) Weil ich meine WCF Webservice wissen muss konfiguriert werden, Windows-Authentifizierung zu verwenden, schließe ich, ich kann nicht den WCF-Testclient verwenden weiterhin, wenn mein Dienst in IIS-Hosting. Dass es effektiv überlebt hat ist es mir Nützlichkeit. Ich werde nur die Zeit nehmen muß, um einen Web-Client zu schreiben, weil WCFTestClient nicht ohne Anonymous arbeiten.

(oder)

(b) Es ist möglich, WCF Test Client zu verwenden, wenn sie und der gehosteten Dienst propertly konfiguriert sind (ich weiß einfach nicht, was die speziellen Konfigurationstechniken hierfür sind).

Was ist richtig? Zeit zu stoppen WCFTestClient mit oder gibt es eine Möglichkeit, es zu haben, in beiden Richtungen? Vielen Dank im Voraus für Ihre Beratung.

EDIT: 11. Juni 09

Gibt es etwas, was ich bieten kann jemand anderes mir helfen, zu dieser Frage zu helfen?

War es hilfreich?

Lösung 3

Als ich den Titel / Gegenstand dieser Frage festgelegt und erreichte hier eine Sackgasse, öffnete ich das gleiche Problem in dem MSDN-Forum mit einem anderen Schwerpunkt auf dem Titel (Inhalt der Frage im Wesentlichen gleich) auf.

Für mich war die eigentliche Frage, wie WCFTestClient in IIS zu verwenden, ohne die anonymen Authentifizierung eingestellt ist (weil mein Dienst nur integrierte Windows-Authentifizierung erforderlich).

Mex erfordert offenbar anonym und wird standardmäßig WCFTestClient scheint Mex zu müssen. Der Schlüssel scheint sowohl meine Rakeln werden zuvor sorgfältig die Datei web.config auf.

Wie auch immer, ich habe es mit dieser web.config arbeitet unter ( der MSDN Link hier ist :

<?xml version="1.0"?>
<configuration>

                 

            <endpoint address="" 
                        binding="wsHttpBinding"
                        bindingConfiguration="wsBindingConfig"
                        contract="sdkTrimFileServiceWCF.IFileService">

                                 <identity>
                                    <dns value="localhost" />
                                 </identity>
            </endpoint>

            <endpoint address="basic" 
                        binding="basicHttpBinding"
                        bindingConfiguration="bindingConfig" 
                        contract="sdkTrimFileServiceWCF.IFileService" />
        </service>
    </services>

    <bindings>
        <basicHttpBinding>
            <binding name="bindingConfig">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows"/>
                </security>
            </binding>
        </basicHttpBinding>

        <wsHttpBinding>
            <binding name="wsBindingConfig">
                <security mode="Transport">
                    <transport clientCredentialType="Windows"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>

                                                                                        

        </serviceBehaviors>
    </behaviors>

      

Andere Tipps

Ich habe gerade versucht, das gleiche Setup haben - aber in meinem Fall scheint alles gut zu funktionieren

.
  • ASP.NET-Website
  • WCF-Dienst, mit Basichttpbinding ohne besondere Einstellungen bei allen
  • IIS-Anwendung mit anonymer = aktiviert und Windows-Authentifizierung = aktiviert (beide eingeschaltet)

ich es mit dem WcfTestClient leicht eine Verbindung herstellen kann und die Metadaten abrufen, und ich kann es dann nennen, kein Problem.

In meiner Service-Funktion, ich überprüfe, um zu sehen, ob der aktuelle Benutzer ein bekannter Benutzer ist oder nicht, wird es korrekt identifiziert als Windows-authentifizierte Benutzer:

    ServiceSecurityContext ssc = ServiceSecurityContext.Current;

    if (ssc.IsAnonymous)
    {
        return "anonymous user";
    }
    else
    {
        if(ssc.WindowsIdentity != null)
        {
            return ssc.WindowsIdentity.Name;
        }

        if (ssc.PrimaryIdentity != null)
        {
            return ssc.PrimaryIdentity.Name;
        }
    }

    return "(no known user)";

ich nicht wirklich wissen, was für mehr zu überprüfen (außer ich auf Vista mit IIS7 bin). Jede Chance, Sie könnten diesen Code enthalten für den Benutzer in Ihrem Service-Code zu überprüfen? Nur um zu sehen ....

Marc

Marc, ist das Setup nicht einmal in der Nähe Johns.

John verwendet WSHttpBinding, die Windows-Anmeldeinformationen für den Nachrichtenmodus Transport verwendet. Die Windows-Authentifizierung wird nicht mit Basichttpbinding verwendet wird. Außerdem John hatte deaktiviert AnonymousAuthentication, weshalb die Metadaten Exchange (mex) versagt.

Der Anruf wird nicht einmal innerhalb der Serviceseite Funktion erreichen, weil wir einen Fehler 401 (Unauthorized) erhalten, wenn wir zu rufen versuchen.

Genau wissen, John, ich habe das gleiche Problem, und ich versuche, irgendwie getrennte Bindungen einzurichten pro Endpunkt. Hoffentlich funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top