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