バックグラウンド:
私は非常にうまく機能しているWCFサービス(.NET 3.5)を作成しました。JavaScriptでサービスを使用する必要があり、ドメイン間の制限により(サービスはJavaScriptを含むWebページとは異なるサーバーにあります) 、標準のソープポストが機能していませんでした。いくつかの構成を変更し、Microsoft ブログの投稿に従ってメソッドに WebInvoke 属性を追加し、GET で動作するサービスを取得し、soapUI でテストしてメソッドが動作していることを確認しました。私は JSFiddle で例をセットアップしようとしていましたが、これはイントラネット サービスであるため、明らかに動作させることができませんでした。
これが私の SVC.cs ファイルのメソッドです: (これを理解しようとして、いくつかのコード変更と構成ファイルへの変更を行いました)
// On the interface that defines the contract
[OperationContract]
[WebGet]
string Post(string questionid, string answervalue);
// In my actual service file code behine.
public string Post(string questionid, string answervalue)
{
Guid dataid = _dataProvider.Post(questionid, answervalue);
_dataProvider.Log(retval.ToString());
return dataid.ToString();
}
URL を入力するだけで、その値を表す GUID の文字列表現が返されます。
http://localhost/WebPostSvc.svc/json/Post?questionid=207&answervalue=207009
returns: "<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">04bb6445-b1af-4214-8f8b-cf66bb15467f</string>"
ここに私が仕事をしようとしているjavascriptがあります:
<script type="text/javascript">
// string functions to allow formatted output
String.prototype.format = function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
$(function()
{
$('.testpostbtn').click(function() {
$.jsonp({
url: "ttp://localhost/WebPostSvc.svc/json/Post?questionid=207&answervalue=207009",
callbackParameter: "callback",
"success" : function(data) {
alert(data);
},
"error" : function(d, msg) {
alert(
"Could not post the data\ncallback={0}\ncallbackParameter={1}\nurl={2}\n{3}\n"
.format(d.callback, d.callbackParameter, d.url, msg)
);
}
});
alert('request sent!');
});
});
</script>
$.jsonp メソッドは次のとおりです。
// jquery.jsonp 2.3.1 (c)2012 Julian Aubourg | MIT License
// https://github.com/jaubourg/jquery-jsonp
対処しなければならないのは、アラート ボックスに送信したメソッドから返されたエラーだけです。
Could not post the data
callback=_jqjsp
callbackParameter=callback
url=http://localhost/WebPostSvc.svc/json/Post?questionid=207&answervalue=207009
error
返される唯一のエラー メッセージは "error" で、あまり役に立ちません。
メソッドを間違って使用しているだけだと確信しており、次のことを知る必要があります。
私は何を間違っていますか?