2010-06-25 59 views
0

所以我打电话给一个wcf webservice使用Rest WebHttp。我还建立了第二个绑定mex进行测试。我的方法正在工作,但是当我尝试通过客户端应用程序通过fiddler或直接的httppost进行测试时,我得到一个400错误的请求错误。我将多个数据合同传递给该方法。它迫使我使用包装的BodyStyle,但我不知道如何格式化我的xml以进行测试。我已经创建了一个测试方法来尝试这个和相同的错误。这里是我的代码:我所有的其他方法都与一个数据合同一起工作,但是我有两个方法没有。我相信这个问题是在这篇文章底部的xml中,它需要被封装,但我不知道如何封装它。WCF Rest多重DataContracts包装

[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,我使用

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

回答

1

我怕你会与此作斗争。首先,您错过了DataContract序列化命名空间。 DataContractSerializer非常挑剔它是如何希望它是xml格式的。

有人试图做一些简单的事情,但他很难让WCF接受它,所以有一个问题recently

Here是如何格式化包装参数的说明。

+0

嘿达雷尔,非常感谢您的建议,并指着我几个好帖子。我得到它的工作,我不停的命名空间为“”,但我的方法是通过a和m为paramater名称,以便下面的作品现在: \t jenglish \t 树梢 \t jenglish \t Carter 2010-06-25 16:24:19

+0

@Carter祝你好运。你需要它;-) – 2010-06-25 17:17:28