2011-10-27 20 views
2

私は2つの方法で以下のようにRESTfulなサービスを構築していますへのクライアントのパスパラメータ(注:私はASPNETCompatilibilityModeがtrueに設定されている):今すぐどのようにRESTfulなWCFサービス

[WebInvoke] 
string TestMethodA() 
{ 
     string test = HttpContext.Current.Request.Form["xml"]; 
} 

[WebInvoke] 
string TestMethodB(string res) 
{ 
     string xml = res; 
} 

でクライアントを構築MethodAにパラメータを渡すために、私は次のようにします。

request.AddParameter("xmlString", HttpUtility.HtmlEncode(requestBody)); 

そしてMethodBにメッセージを送信するために、私は次のようにします。

request.AddParameter("text/xml",requestBody, ParameterType.RequestBody); 

質問は次のとおりです。

パラメータの受け渡し方法をクライアントはどのように知っていますか?クライアントはサーバーの実装を認識していません。

リクエストを送信するクライアントはRestSharp APIを使用しています。

+0

サービスではインフラストラクチャ(この場合はリクエスト本体に表示されるHTTP)が一般的に理想的ではないことを認識しています。なぜ、TestMethodAを文字列にして、常にあなたのメソッドを同じ方法で呼び出すのではないでしょうか?そうすれば、サービスはhttpバインディングでホストされていなくても動作し、クライアントはサービスを呼び出す方法を知る必要がある方法の1つしかありません。 – kmp

答えて

0

MethodB()は文字列を取るので、WCFはどのように見えるかわかりません。それは、XML、JSON、フリーテキスト、何でもかまいません。あなたの実装では、要求をフォーマットする方法を文書化し、それをクライアントを実装している人に与えるだけでよいのです。

より良いアプローチは、C#オブジェクトを作成し、適切なシリアル化属性でマークアップし、MethodB()のパラメータとして使用することです。例:

これにより、WCFインフラストラクチャは自動的に引数を解析できます。また、WCFにヘルプドキュメントを自動生成させることもできます。

関連する問題