Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用curl将参数发布到WCF服务_C#_Wcf_Http_Curl - Fatal编程技术网

C# 如何使用curl将参数发布到WCF服务

C# 如何使用curl将参数发布到WCF服务,c#,wcf,http,curl,C#,Wcf,Http,Curl,如何使用命令行工具curl发布到具有多个参数的WCF服务 我有如下服务 [ServiceContract] public interface IMyService { [OperationContract] [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)] void PostMethod(string varString, bool varBool); } 我这样设置服务器 var service = new We

如何使用命令行工具
curl
发布到具有多个参数的WCF服务

我有如下服务

[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调用此方法

curl -d varString=foo -d varBool=true http://localhost:3000/MyService/PostMethod
错误在哪里?该方法的车身风格是否错误?我应该像下面这样将参数包装在[DataContract]类中吗

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

    [DataMember]
    public bool varBool { get; set; }
}
订正答复:

URI模板不适用于使用curl将请求发布到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>
这并不漂亮,但你可以用这个:

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

这对curl-s-d varString=foo-d varBool=true没有响应http://localhost:3000/MyService/PostMethod。尽管如果我改为这样做,它确实可以工作
curl-s-d并不重要http://localhost:3000/MyService/PostMethod?varString=foo&varBool=true
。如果不必提供数据参数或使用它来代替url来处理数据,那就太好了。嗯,我已经尝试过了,它在这里起了作用(我确实从powershell运行了curl)。让我看看为什么会有不同。我使用的是没有默认端点的.net 4.0。虽然我不认为这会使它对你而不是我起作用。你对内容类型做了什么吗?
curl -d"{\"varString\":\"so99\",\"varBool\":\"true\"}"  -i -X POST -H "Content-Type:application/json"  http://localhost:3000/MyService/PostMethodJson