2016-03-31 13 views
0

Ich habe unzählige Durchläufe des Erstellens von WCF-Diensten heute gelesen, und nachdem ich zu viele Male versucht habe, bin ich an diesem Punkt angekommen und muss für den Tag aufgeben, um meinen Verstand zu behalten. Ich versuche, eine API (SmartyStreets) zu testen, die Testadresse abzurufen, die sie auf ihrer Site auflisten, und Antworten im JSON-Format zurück zu bekommen.WCF von Jquery angerufen: Methode nicht erlaubt

Ich habe ein ISmartySreets.cs:

[ServiceContract] 
public interface ISmartyStreetsService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    string AddressLookup(string learnersID, string street, string secondary, string city, string state, string zip); 
} 

Ich habe eine SmartyStreets.svc.cs Datei:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class SmartyStreetsService : ISmartyStreetsService 
{ 
    public string AddressLookup(string street, string secondary, string city, string state, string zip) 
    { 
     //Lookup returns JSON of addresses, or string error. 
     return Lookup(street, secondary, city, state, zip); 
    } 
} 

Ich habe einen web.config Frankenstein, der von dem Opfer der ständigen Änderungen ist meine Forschung:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5.2" /> 
    <httpRuntime targetFramework="4.5.2"/> 
    <customErrors mode="Off"/> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="SmartyStreetsWCF.SmartyStreetsService" behaviorConfiguration="serviceBehavior"> 
     <endpoint address="" 
        binding="webHttpBinding" 
        contract="SmartyStreetsWCF.ISmartyStreetsService" 
        behaviorConfiguration="web"></endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehavior"> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="webHttpBinding" scheme="https" /> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*"/> 
     <add name="Access-Control-Allow-Headers" value="Content-Type, Accept" /> 
     <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" /> 
     <add name="Access-Control-Max-Age" value="1728000" /> 
     </customHeaders> 
    </httpProtocol> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 
</configuration> 

Und zuletzt habe ich eine sehr bescheidene HTML-Datei mit Jquery, um meinen Dienst anzurufen , gehostet auf einem nicht lokalen Webserver.

$.ajax({ 
     url: "http://wcftesting2.com/SmartyStreets.svc/AddressLookup", 
     type: "GET", 
     data: {street: "1 Rosedale St", secondary: "", city: "Baltimore", state:"MD", zip:"21229"}, 
     contentType: "application/json", 
     dataType: "json", 
     success: function(addresses) { 
      alert("EUREKA!"); 
     }, 
     error: function(error) { 
      alert("FAILURE"); 
     } 
    }); 

Der Versuch, den jquery von meiner HTML-Seite zu laufen bekomme ich folgendes: Antwort für Preflight hat ungültige HTTP-Statuscode 405

„Optionen“ sind als solche: /SmartyStreets.svc/AddressLookup ? street = 1 + Rosedale + St & sekundär = & city = Baltimore & state = MD & zip = 212

auf den Link Navigation: http://wcftesting2.com/SmartyStreets.svc/AddressLookup?learnersID=12345&street=1+Rosedale+St&secondary=&city=Baltimore&state=MD&zip=21229 nur sa ys, "Methode nicht erlaubt".

Ich nehme an, mein Problem ist irgendwo zwischen der Datei web.config und wie ich den Dienst mit Jquery anrufe, aber ich muss aufhören für einen Abend zu arbeiten.

Wenn mir jemand im geringsten helfen kann, wäre das erstaunlich.

Antwort

0

Ich schätze, Sie dienen nicht das Frontend von http://wcftesting2.com, die Ihren Browser auslöst, die Anfrage vorzufliegen. Dies wird automatisch von CORS-konformen Browsern durchgeführt. Dies wäre in Ordnung, wenn Ihr Server so konfiguriert wurde, dass er die Anfrage unterstützt, aber das scheint nicht der Fall zu sein.

Sie können entweder

Verwandte Themen