私は最近 jQuery をブラッシュアップしていましたが、投稿を行っているときに問題に遭遇しました。wcf サービスからの応答を取得できませんでした。常に 405 - メソッドが許可されていません。私の要求は良さそうに見えますが、なぜこれが起こるのかについて、決定的でありながら明らかな何かを見落としているのではないかと思いました。
使用されている郵便番号は次のとおりです。
$.ajax({
type: "POST",
url: "http://localhost:59929/CustomerService/GetCustomers",
data: null,
ContentType: "application/json",
dataType: "json",
success: function (msg) {
alert("Called and got: " + msg);
},
error: function (result) {
alert('Service call failed: ' + result.status + '' + result.statusText);
}
});
wcf コードは次のとおりです。
[ServiceContract]
public interface ICustomerService
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
List<Customer> GetCustomers();
[OperationContract]
OperationStatus InsertCustomer(Customer cust);
}
構成は次のとおりです。
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Fiddler は未加工の投稿を次のように表示します。
POST http://localhost:59929/CustomerService/GetCustomers HTTP/1.1
Host: localhost:59929
Connection: keep-alive
Content-Length: 0
Origin: http://localhost:59513
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:59513/LearnJQuery2/ajax/ajax_post.htm
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
fiddler も 405 応答を確認します。