2013-07-23 11 views
6

Ich versuche, CORS für eine neue Version unseres SOAP-Web-Service (der unter HTTPS läuft und Benutzername/Passwort-Authentifizierung hat), die über JS verbunden werden können.Verwendung von CORS + SOAP + WCF für einen HTTPS-Dienst

Im Moment bekomme ich es funktioniert gut lokal (nicht domänenübergreifend) aber bald, da es eine andere Domäne verwendet, bekomme ich Folgendes aus dem WCF Traceviewer. (400 Bad Request in IIS7)

<ExceptionString>System.Xml.XmlException: The body of the message cannot be read because it is empty.</ExceptionString> 

Es scheint, es nicht einmal ist zum Teil immer, wo meine Nachricht Inspektor der entsprechenden CORS-Header hinzuzufügen läuft.

Hat jemand dies schon einmal erlebt oder hat es CORS geschafft, unter einem HTTPS SOAP Service zu arbeiten?

Ich würde mich über jeden möglichen Rat freuen, den Sie geben können.

Cheers, Jamie

+0

Niemand hat irgendwelche Ideen? – Jamie

+1

Haben Sie die Lösungen von diesem Problem überprüft und ausprobiert [SO: Aktivieren der verteilungsübergreifenden Ressourcenfreigabe auf IIS7] (http://stackoverflow.com/questions/12458444/enabling-cross-origin-resource-sharing-on-iis7) –

+0

sicher, dass alle non-GET/POST-Methoden explizit von content-orign-allow-methods zugelassen sind. Ich erinnere mich an WebDAV mit Propget und Suche, nicht sicher über andere SOAPs ... – dandavis

Antwort

1

Eigentlich können Sie tun dies nur die Antwort benutzerdefinierten Header pro Anfrage wie diese umzusetzen.

Response.AppendHeader("Access-Control-Allow-Origin", "*"); 

Es gibt mehrere Möglichkeiten, dies zu tun. Du kannst nur chooise ist. Schaust du den enabling domainübergreifenden Zugriff auf die Artikel von WCF? Implementiert ein Projekt verwendet WCF-Service von WCF und WCF-Service-Hosts auf Cross-Domain. Sie können Jsonp mit Webhttp-Bindung verwenden. Beispiel Antwort ist hier;

Cross Domain jQuery Ajax Request & WCF REST Service

oder Sie Konfiguration wie folgt implementieren:

<system.webServer> 
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 
</httpProtocol> 
</system.webServer> 

Für die beste Art und Weise zu implementieren/Aktivierung cors Sie bitte die enable-cors.org Website überprüfen. Ich kann diesen Link leicht finden.

http://enable-cors.org/server_wcf.html

Zumindest kann man JSONP statt json verwenden. es ist frei, aber schwierig zu handhaben.

Ich frage mich, was Sie es choise.

+0

Ich verwende SOAP, da es sich um einen bestehenden Dienst handelt. Wenn dies REST oder JSON wäre, wäre es wahrscheinlich viel einfacher. Ich habe die Seite "enable-cors" bereits ohne Erfolg angeschaut, also stelle ich mir vor, dass das Problem mit Sicherheit zu tun hat. – Jamie

+0

OK, können Sie versuchen, einen Proxy-Service wie eine myproxy.svc (die gleiche Website, wo Javascript-Dateien laufen oder Cors aktiviert Website) und rufen Sie über js corsenabeldsite.com/myservice/requestToRealService oder myservice/requestToRealService. In requestToRealService können Sie den Dienst auf Ihrem Server aufrufen. –

Verwandte Themen