2

.net4で実行されているRESTWCFサービスを取得し、それが機能しているWebサービスをテストし、それに作成したHttpRequestを受け入れました。しかし、Webサービス内のHttpRequest本体にアクセスしようとすると問題が発生しました。FiddlerとWinFormアプリの両方を使用して、HttpRequestに追加されたランダムなサイズのデータ​​を送信しようとしましたが、実行時にリクエストの本文が配置されているオブジェクトが見つからないようです。私の最初の本能は調べることでしたHttpContext.Current.Request.InputStreamが、そのプロパティの長さは0なので、そのオブジェクトを調べてみるとIncomingWebRequestContext、HttpRequestの本体を取得するためのメソッドもプロパティもありません。

だから私の質問は、実際にWCFのHttpRequestリクエスト本文にアクセスする方法はありますか?

PS:リクエスト本文内のデータはJSON文字列であり、レスポンスの場合、レスポンス本文内のデータもJSON文字列として返します。

4

2 に答える 2

9

もっと簡単に言えば、 WCF + RESTに関するこの回答:リクエストデータはどこにありますか?正常に動作します。

また、リクエストの本文が逆シリアル化できる場合は、クラスを渡すだけです。いくつかのタイプミスを除けば、これはうまくいくはずです:

public class Banana
{
    public string Colour;
    public int Size;
}

..。

[WebInvoke(
    Method = "POST", 
    UriTemplate = "bananas", 
    ResponseFormat=WebMessageFormat.Json, 
    RequestFormat=WebMessageFormat.Json)]
string CreateBanana(Banana banana);

..。

public string CreateBanana(Banana banana)
{
    return "It's a " + banana.Colour + " banana!";
}

{"Colour": "blue", "Size": 5}このリソースへのデータを使用してPOSTを実行すると、が返され"It's a blue banana!"ます。

于 2011-05-26T11:45:22.173 に答える
4

で試してみてください((System.ServiceModel.Channels.BufferedMessageData)(((System.ServiceModel.Channels.BufferedMessage)((OperationContext.Current.RequestContext).RequestMessage)).MessageData)).Buffer

タイプがありますSystem.ArraySegment<byte>

またはWCF+RESTを読んでください:リクエストデータはどこにありますか?

于 2010-06-16T01:41:55.690 に答える