2009-08-03 6 views
0

webHttpBindingエンドポイントで公開されているWCFサービスがあります。理論的にwebHttpBindingを使用してWCFリクエストのボディにオブジェクトをシリアライズ

[OperationContract(IsOneWay = true)] 
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "/?action=DoSomething&v1={value1}&v2={value2}")] 
void DoSomething(string value1, string value2, MySimpleObject value3); 

、私はこれを呼び出した場合、最初の2つのパラメータ(値1 &値2)ウリから採取され、最終の一方(VALUE3)は、要求の本体からデシリアライズされるべきです。

私がRequestFormatとしてJsonを使用していると仮定して、送信する前にMySimpleObjectのインスタンスをリクエスト本体に直列化する最良の方法は何ですか?これは、例えば、動作するようには思えません。私は何が起こるかを心配するだろう

using (var response = sendRequest.GetResponse()) 
{ 
} 

:私は違ったんだろう

HttpWebRequest sendRequest = (HttpWebRequest)WebRequest.Create(url); 
sendRequest.ContentType = "application/json"; 
sendRequest.Method = "POST"; 
using (var sendRequestStream = sendRequest.GetRequestStream()) 
{ 
    DataContractJsonSerializer jsonSerializer = 
     new DataContractJsonSerializer(typeof(MySimpleObject)); 
    jsonSerializer.WriteObject(sendRequestStream, obj); 
    sendRequestStream.Close(); 
} 
sendRequest.GetResponse().Close(); 
+0

問題を混乱させるだけであるため、この質問からRESTへの参照を削除しました。 RESTfulなことをしていたら、この質問は無関係です。 –

+0

提案:最後のパラメータをintにして試してみてください。 –

+0

ジョン・サンダース:私はすでにそれをしました。これは、オブジェクトパラメータなしで、intで置き換えられたオブジェクトで正常に動作します。 –

答えて

0

ことの一つは、usingブロックににWebResponseを置くことですCloseがコード内で例外をスローした場合

また、例外を記録していますか?試してみるといいでしょう:

try 
{ 
    using (var response = sendRequest.GetResponse()) 
    { 
    } 
} 
catch (Exception ex) { 
    Console.WriteLine(ex.ToString()); // Or however you want to display it 
    throw; 
} 

これは、(200以外のHTTPステータスのような)応答の問題を確実に把握します。

+0

例外はありません。エンドポイントからの応答コードは202 Acceptedです。私はサービストレースログを見てきましたが、場合によっては不一致エラーがあり、他の場合は逆直列化エラーがありました。これで、Jsonのシリアル化(DataContractJsonSerializedrとJson.Netの両方を使用)とXmlSerializerの両方を使用した作業が可能になりました。 –

0

これで、Jsonのシリアル化(DataContractJsonSerializerとJson.Netの両方を使用)とXmlSerializerの両方を使用して作業するようになりました。

奇妙なことは、Web呼び出し属性のRequestFormat = WebMessageFormat.Xmlプロパティが無視されている、つまりこの設定に関係なく、インバウンドメッセージがxmlまたはjsonからデシリアライズされているようです。

+0

あなたはどのように仕事をしたのか投稿することができますか? –

関連する問題