jQuery Ajax Aufruf von WCF-service-Rückkehr "Methode nicht erlaubt (405)"
Erstellte ich eine WCF-SOAP-Dienst mit VS 2008, das funktioniert server-Seite. Ich wendete auf den code unten, um die selbe Leistung/Vertrag-client-Seite mit jQuery/json (keine ASP.NET scriptmanager). Wenn ich die service-url in den browser, bekomme ich die richtigen service-Seite und wenn ich den Dienst aufrufen von javascript-und trace via Firebug, bekomme ich "405 Methode nicht erlaubt".
Ajax() error-Funktion ist statusText und und responseText enthält nichts und die error-Funktion aufgerufen wird zweimal für einige seltsame Grund. Ich bin auch aufrufen des Dienstes aus einer https-Seite.
Den gleichen ajax-code arbeitet mit einer ähnlichen traditionellen webservice-server-Seite und client-Seite und arbeitet auch mit einer Seite-Methode.
Irgendwelche Hinweise? Ich habe auch bemerkt, dass mein Windows Communication Foundation HTTP-Aktivierung und Nicht-HTTP-Aktivierung nicht installiert sind. Brauche ich diese? Mein server-Seite WCF-Dienst funktioniert aber.
Schnittstelle:
[ServiceContract]
public interface ICust
{
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
bool GetCust(string zzz);
}
Klasse:
public class Cust: ICust
{
public bool GetCust(string zzz)
{
//Do Stuff
//Return true/false;
}
}
web.config:
<behaviors>
<serviceBehaviors>
<behavior name="E.W.CustomerBehavior" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webCallable">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="E.W.CustomerBehavior"
name="E.W.Customer">
<endpoint address="http://zzzz/Cust.svc"
binding="webHttpBinding"
contract="E.W.ICust"
behaviorConfiguration="webCallable">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
jQuery:
$.ajax({
cache: false,
async: false,
type: "POST",
url: "http://zzzz/Cust.svc/GetCust",
contentType: "application/json",
dataType: "json",
data: "{'zzz': '" + $("#ctl00_zz_zzz").val() + "'}",
success: function(msg) {
//do stuff
},
error: function(z) { alert(z.responseText); }
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, legen Sie Folgendes Attribut auf die Klasse
Cust
War das problem https. Die Seite, von welcher der service aufgerufen wurde, wurde, https, also der "Methode nicht erlaubt".
Ich das web verändert.config und javascript-Datei zum aufrufen des Dienstes mithilfe von https und es funktionierte.
Diese mir geholfen.
Ich sehe jetzt, warum die Leute sagen, WCF ist mehr Arbeit nach vorne.
Installierte ich Windows Communication Foundation HTTP-Aktivierung und Nicht-HTTP-Aktivierung, die hat nichts zu tun mit meinem Problem, aber ich bin mir immer noch nicht klar, was Sie sind.