2010-06-25 11 views
0

그래서 Rest WebHttp를 사용하여 wcf webservice를 호출합니다. 또한 테스트를 위해 두 번째 바인딩 mex를 설정했습니다. 내 방법은 작동하지만 내가 피들러 또는 똑바로 httppost를 통해 클라이언트 응용 프로그램을 통해 테스트하려고하면 400 잘못된 요청 오류가 발생합니다. 메서드에 여러 개의 datacontracts를 전달하고 있습니다. 그것은 포장의 BodyStyle을 사용하도록 강요하지만 테스트를 위해 내 XML의 형식을 지정하는 방법을 모르겠습니다. 이 오류를 시험하기위한 테스트 방법을 만들었습니다. 여기 내 코드가 있습니다 : 내 모든 다른 메서드는 하나의 datacontract 함께 작동하지만이 하나는 내가 두 가지 않습니다. 나는이 게시물의 하단에있는 xml에 문제가 있다고 믿는다. 포장해야하지만 포장하는 법을 모르겠다. 내가WCF Rest Mrapliple DataContracts Wrapped

<Test> 
<wsAuth> 
<DeviceId>jenglish</DeviceId> 
<Password>treetop</Password> 
<UserName>jenglish</UserName> 
</wsAuth> 
<wsMed> 
<Test></Test> 
</wsMed> 
</Test> 

답변

1

을 사용하고

[OperationContract] 
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped)] 
string Test(wsAuth a, wsMed m); 

[DataContract(Namespace = "")] 
public class wsMed 
{ 
[DataMember] 
public string Test{ get; set; } 
} 

[DataContract(Namespace = "")] 
public class wsAuth 
{ 
[DataMember] 
public string UserName { get; set; } 
[DataMember] 
     public string Password { get; set; } 
[DataMember] 
public string DeviceId { get; set; } 
} 

내 XML은 당신이 투쟁하려고 두려워. 우선, DataContract 직렬화 네임 스페이스가 누락되었습니다. DataContractSerializer는 XML 형식을 원하는 방식에 대해 까다 롭습니다.

훨씬 간단하게하려고하는 사람으로부터 질문이 recently 있었는데 WCF를 받아들이는 데 어려움을 겪고있었습니다.

Here은 랩핑 된 매개 변수의 형식을 지정하는 방법에 대한 설명입니다.

+0

안녕 Darrel, 충고에 대해 많은 조언을하고 몇 가지 좋은 게시물을 가리키고 있습니다. 나는 내가 ""로 네임 스페이스를 유지하지만 내 방법은 이제 다음 작품 있도록 paramater 이름으로 a와 m을 전달하고, 일을 가지고 : \t 나무 꼭대기 \t jenglish을 \t jenglish \t Carter

+0

@Carter 행운을 빌어 요. 너는 그것을 필요로 할 것이다 ;-) –