それで、私はしばらくの間Webサービスをいじり回していて、私はいくつかの基本に立ち返り続けていますが、私は決して正しくないようです。
質問1:
.NET / C#でWebServiceHostを使用する場合、メソッド/エンドポイントをGET / POST/etcを使用するように定義できます。GETメソッドの設定は簡単で、ほとんど直接機能し、その機能を理解するのも簡単です。例えば:
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/PutMessage/{jsonString}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
string PutMessage(string jsonString);
http:/// MyWebService / PutMessage / {MyJsonString}を呼び出すと、メソッドが渡され、すべてが順調です(多かれ少なかれ)。
しかし、これを代わりにPOSTとして定義するとはどういう意味ですか?
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/PutMessage/{jsonString}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
string PutMessage(string jsonString);
UriTemplateはここで何をしますか?POSTを実行する場合、データはURIではなく、投稿の「データセクション」に含まれていると思います。しかし、データセクションで変数名を定義しますか?WebServiceHost / .NETは、投稿の「データセクション」に含まれているものが変数jsonStringに入れられることをどのように認識しますか?クライアント側(C#ではなく、代わりにJQueryとしましょう)からデータを投稿して、サーバー側で正しく解釈されるようにするにはどうすればよいですか?
(そして、WebMessageFormatはどのように物事に影響を与えますか?私はこれについてどこでも読んだことがあります(MSDN、Stackoverflowなど)が、明確で良い答えを見つけられませんでした。)
質問2:
これを理解するために、次のような非常に単純なPOSTメソッドを作成すると思いました。
[OperationContract]
[WebInvoke]
string PutJSONRequest(string pc);
次に、Fiddlerを使用してこのメソッドを呼び出してみますが、それはまったく機能しません。「HTTP/1.1400BadRequest」という400エラーが返されます。メソッドのコードの最初の行にブレークポイントがあり、メソッド自体には何も含まれていません。
public string PutJSONRequest(string pc)
{
return null;
}
繰り返しになりますが、.NETは、Fiddlerを使用して投稿したものが「文字列pc」に含まれている必要があることをどのように認識しますか?それを文字列としてどのように解釈し、どのタイプの文字列(UT8、ASCIIなど)ですか?
これは、Fiddlerから送信されたRAWHTTPリクエストです。
POST http://<myip>:8093/AlfaCustomerApp/PutJSONRequest HTTP/1.1
User-Agent: Fiddler
Host: <myip>:8093
Content-Length: 3
Content-type: application/x-www-form-urlencoded; charset=UTF-8
asd
そして、私が見る限り、どのタイプのコンテンツタイプを使用するかは問題ではありません。
応答は標準的なものであり、私は自分自身を制御できません。
HTTP/1.1 400 Bad Request
Content-Length: 1165
Content-Type: text/html
Server: Microsoft-HTTPAPI/2.0
Date: Mon, 15 Oct 2012 15:45:02 GMT
[then HTML code]
どんな助けでもいただければ幸いです。ありがとう。