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); }
});
InformationsquelleAutor Steve | 2010-06-16
Schreibe einen Kommentar