2012-04-17 3 views
3

매개 변수가 두 개 이상있는 WCF 서비스에 게시하려면 명령 줄 도구 curl을 어떻게 사용합니까? WCF 서비스에 curl을 사용하여 매개 변수를 사용하여 POST하는 방법

가 나는 컬을 통해이 메소드를 호출 할 방법이

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

같은 다음

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

그리고 설치 서버와 같은 서비스를?

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 템플릿은 웹 서비스에 대한 요청을 게시 할 컬을 사용하여 작동하지 않습니다. WebInvoke는 POST 본문이 XML 또는 JSON이 될 것으로 예상합니다.

랩핑해야하는 매개 변수가 2 개 있으므로 WebMessageBodyStyle.Bare가 작동하지 않습니다.

[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 사용. `컬 -s -d

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

이 응답하지 않습니다

당신이 사용할 수 곱슬 가장 가까운 옵션은

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

그것은 꽤 아니라 당신이 다음이 사용할 수있는 JSON

입니다 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

관련 문제