2012-04-17 30 views
3

コマンドラインツールcurlを使用して、2つ以上のパラメータを持つWCFサービスに投稿するにはどうすればよいですか?WCFサービスにcurlを使用してパラメータをPOSTする方法

私は、次の

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)] 
    void PostMethod(string varString, bool varBool); 
} 

そして私のセットアップ私はカールを経由してこのメ​​ソッドを呼び出すにはどうすればよいこの

var service = new WebServiceHost(typeof(MyService), 
    new Uri("http://localhost:3000/MyService"); 
service.AddServiceEndpoint(typeof(IMyService), new WebHttpBinding(), ""); 
service.Open(); 

などのサーバーのようなサービスがありますか?

curl -d varString=foo -d varBool=true http://localhost:3000/MyService/PostMethod 

エラーはどこにありますか?メソッドのBodyStyleは間違っていますか?私は、次のような[DataContract]クラスのパラメータをラップする必要がありますか?

[DataContract] 
public class PostMethodResult 
{ 
    [DataMember] 
    public string varString { get; set; } 

    [DataMember] 
    public bool varBool { get; set; } 
} 

答えて

1

改訂答え:

URIテンプレートは、Webサービスへのリクエストを投稿するカールを使用して動作しません。 WebInvokeは、POST本体がXMLまたはJSONのいずれかであることを想定しています。

WebMessageBodyStyle.Bareは2つのパラメータがあるため、ラップする必要があるため機能しません。

[OperationContract] 
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)] 
string PostMethod(string varString, bool varBool); 

ポスト本体の形状は次のようになります。

<PostMethod xmlns="http://tempuri.org/"><varString>1</varString><varBool>true</varBool> </PostMethod> 

それはしかし、空のボディとPOSTですので、あなたがURIを経由して値を渡すUriTemplateを使用します。

あなたが使用することができ、カールと最も近いオプションは、それはかなりありませんが、あなたは、この使用することができますJSON

[OperationContract] 
[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json)] 
string PostMethodJson(string varString, bool varBool); 

です:

curl -d"{\"varString\":\"so99\",\"varBool\":\"true\"}" -i -X POST -H "Content-Type:application/json" http://localhost:3000/MyService/PostMethodJson 
+0

これはカール-s -d 'に応答しないがvarString = foo -d varBool = true http:// localhost:3000/MyService/PostMethod'。しかし、代わりに 'curl -s -d doesnot = matter http:// localhost:3000/MyService/PostMethod?varString = foo&varBool = true'を実行すると動作します。データのパラメータを指定したり、URLの代わりにデータに使用したりする必要はありません。 – Jason

+0

うーん、私はこれを試して、ここで働いた(私はパワーシェルからカールを実行した)。どうして違いがあるのか​​見てみましょう。 –

+0

私はデフォルトのエンドポイントなしで.net 4.0を使用しています。私はそれがあなたのために、そして私にとってはうまくいかないと思っていますが。コンテンツタイプに何かしましたか? – Jason

関連する問題