私はWebサービスを持っており、jquery ajax呼び出しを使用して呼び出しています。サービスは、web.configでsilverlightプロジェクトもホストするプロジェクトでホストされています。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept, X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
エンドポイントの設定は
<service behaviorConfiguration="ThreeBirds.HttpServiceBehavior" name="TheWire.Server.Endpoints.LeadCaptureService">
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="AspNetAjaxBehavior" name="LeadCaptureService" contract="ThreeBirds.Services.Contracts.ILeadCaptureService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
カスタム動作構成は
<behavior name="AspNetAjaxBehavior">
<enableWebScript />
</behavior>
そのため、JavaScript から Web サービスを呼び出してデータを送信すると、「405 メソッドは許可されていません」というエラーが表示されます。
var webMethod = 'RecordSubscribe';
var formFields = {
dealerid: dealerID,
firstname: $(form).find(".inputFirstName").val(),
lastname: $(form).find(".inputLastName").val(),
email: $(form).find(".inputEmail").val()
};
$.ajax({
type: "POST",
url: "http://thewire.3birdsmarketing.com/wire/endpoints/Leadcapture.svc/Record" + webMethod,
processData: false,
contentType: "application/json",
data: JSON.stringify(formFields),
allowCrossDomain: true,
dataType: "json",
success: function (data, status, req) {
alert("Thank you " + formFields.firstname + " " + formFields.lastname + ", your information has been submitted.");
},
error: function (data) {
alert('Sorry ! There was an error sending your data. Please try it again.');
}
});
Chrome ではサービスは成功しますが、IE (10) & firefox (19) では失敗し、エラー メッセージが表示されます。Chrome は最初に OPTIONS リクエストを行い、IE と Firefox の場合と同じように 405 になりますが、その後、Chrome は別の POST リクエストを自動的に行い、200 になります。IE と Firefox はこれを別の POST リクエストにしません。
不足しているものはありますか?回答ありがとうございます