2 Stimmen

Authentifizierung beim benutzerdefinierten WCF-Dienst in Sharepoint 2010

Ich habe einen benutzerdefinierten WCF-Dienst in SharePoint 2010 erstellt, die ich versuche, über eine JQuery Ajax-Anforderung aufrufen. Meine benutzerdefinierte WCF-Dienst ist auf dem Beispiel hier gegeben modelliert:

Link: http://blog.sharepointbits.com/2010/04/custom-wcf-services-in-sharepoint-2010_17.html

Die obige Methode gab mir einen WCF-Dienst, auf den ich von C#-Server-seitigem Code zugreifen konnte, und ein benutzerdefiniertes InfoPath-Formular, jedoch war ich nicht in der Lage, eine Antwort mit JQuery Ajax zu erhalten.

Ich habe an anderer Stelle auf Stack Overflow gelesen, dass man MultipleBaseAddressWebServiceHostFactory anstelle einer MultipleBaseAddressBasicHttpBindingServiceHostFactory wie der ursprüngliche Artikel nahelegt.

Link: Sharepoint 2010 wcf service. call method mit jquery

Dies funktionierte und erlaubte mir, den Dienst über JQuery Ajax zu kontaktieren (aber nicht zu authentifizieren),

a) Ich bin nicht mehr in der Lage zu navigieren zu http://[Servername]/_vti_bin/Service.svc/mex und sehen Sie eine WSDL. Dieses Problem bedeutet, dass meine InfoPath-Formulare auch keine Verbindung zum Dienst herstellen können, da sie nach einer WSDL suchen.

b) Obwohl die JQuery-Ajax-Anfrage auf den benutzerdefinierten WCF-Dienst trifft, fordert mich der Browser jedes Mal zur Authentifizierung auf, obwohl die Anfrage vom Browser eines bei SharePoint angemeldeten Benutzers stammt.

Wenn jemand weiß, wie man die Probleme a) und b) beheben kann, wäre ich sehr dankbar dafür. Es sollte wirklich nicht so schwierig sein, einen Dienst zu erstellen, der von jeder Anwendung aus genutzt werden kann.

1voto

MgSam Punkte 11264

Nach einigem Herumprobieren blieb ich bei der Verwendung von MultipleBaseAddressBasicHttpBindingServiceHostFactory . Anstatt zu versuchen, den WCF-Dienst über JSON zu kontaktieren, habe ich eine Funktion erstellt, die eine SOAP-Nachricht erstellt, diese an den WCF-Dienst sendet und dann das Ergebnis parst.

Interessanterweise scheint dies auch mein Authentifizierungsproblem gelöst zu haben, obwohl mir nicht klar ist, warum.

Jetzt ist der Dienst von InfoPath und von JavaScript aus nutzbar.

Als Referenz sollte eine SOAP-Nachricht an WCF aus JavaScript wie folgt aussehen:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">                
    <soap:Body>
       <MethodName xmlns="http://tempuri.org/"> 
           <ParamName1>Value</ParamName1>
           <ParamName2>Value</ParamName2>
       </MethodName> 
    </soap:Body> 
 </soap:Envelope>

Und die JQuery zum Senden:

$.ajax({
    type: "POST",
    url: url,
    data: soapEnvelope,
    timeout: timeOut,
    contentType: "text/xml",
    dataType: "xml",
    beforeSend: function (xhr) {
        xhr.setRequestHeader("SOAPAction", 'http://tempuri.org/' + methodPath);
    },
    success: onSuccess,
    error: onFailure
});

Hinweis: Der einfachste Weg, um herauszufinden, welchen Wert methodPath haben sollte, ist ein Blick in die WSDL für Ihren Dienst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X