Próbuję wywołać usługę WCF z wywołania ajax z jQuery. Udaje mi się wywołać WCF z SOAP-UI iz Excel/VBA. Mój problem pochodzi z żądania opcje, które wysłał i nie POST następująco:Jak wywołać usługę WCF z javascript?
- jeśli ustawić adres URL do
http://mywcf/service.svc
OPTIONS jest wysyłany i uzyskać status400 Bad Request
i żądanie POST nie zostanie wysłana. W tym przypadku brakuje nagłówkaHTTP/1.1
(w porównaniu z nagłówkami SOAP-UI). - jeśli ustawię URL na
http://mywcf/service.svc HTTP/1.1
, OPTIONS zostanie wysłane i otrzymam status200 OK
, ale żądanie POST nie zostanie wysłane. W tym przypadkuHTTP/1.1
wydaje się być interpretowany jako nazwa pliku.
Czy ktoś może mi powiedzieć, jak wywołać akcję POST na WCF z javascript i dodać nagłówek HTTP/1.1
bez uszkodzenia adresu URL usługi?
Oto wyciąg z mojego ajax rozmowy:
var soapData = ''
+'<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mic="http://microsoft.wcf.documentation">'
+' <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsrm="http://docs.oasis-open.org/ws-rx/wsrm/200702">'
+' <wsrm:Sequence>'
+' <wsrm:Identifier>s:Sender a:ActionNotSupported</wsrm:Identifier>'
+' <wsrm:MessageNumber>1</wsrm:MessageNumber>'
+' </wsrm:Sequence>'
+' <wsa:Action>http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence</wsa:Action>'
+' <wsa:ReplyTo>'
+' <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>'
+' </wsa:ReplyTo>'
+' <wsa:MessageID>uuid:'+ MsgUid +'</wsa:MessageID>'
+' <wsa:To>'+ Url +'</wsa:To>'
+' </soap:Header>'
+' <soap:Body xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm">'
+' <wsrm:CreateSequence>'
+' <wsrm:AcksTo xmlns:wsa="http://www.w3.org/2005/08/addressing">'
+' <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>'
+' </wsrm:AcksTo>'
+' <wsrm:Offer>'
+' <wsrm:Identifier>urn:soapui:'+ SeqUid +'</wsrm:Identifier>'
+' </wsrm:Offer>'
+' </wsrm:CreateSequence>'
+' </soap:Body>'
+'</soap:Envelope>';
$.ajax({
type: 'POST',
url: 'http://mywcf/service.svc', // with or without +' HTTP/1.1'
data: soapData,
contentType: 'application/soap+xml;charset=UTF-8',
dataType: 'xml'
});
Wartości w moim WCF web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
Jednym z oczywistych problemów jest adres URL połączenia. Musisz podać nazwę metody WCF w url – Sparrow
@Sparrow Udaje mi się wywołać WCF z VBA i SOAP-UI bez ustawiania nazwy metody. Kiedy dodaję nazwę metody do mojego wywołania ajax, wydaje się, że jest interpretowana jako nazwa pliku. Nie sądzę, żeby to było rozwiązanie. – sinsedrix
Niech głosowanie w dół wyjaśni ich wybór, dziękuję. – sinsedrix