WCF如何包装xml正文消息?

时间:2010-11-12 18:54:16

标签: interop wcf

我遇到了让我的WCF服务与其他客户端一起工作的问题。

ServiceContract看起来像这样:

[ServiceContract]
public interface IMyService
{
  [OperationContract]
  [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, 
    ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml,
    UriTemplate = "/calculation/{accountNumber}")]
  string RunCalculations(string returnInformation, string accountNumber);
}

我写了一个简单的客户端,以确保一切正常,当我传入我想要的xml时,一切都在游泳。

问题在于该服务的存在是为了将我们的产品接口暴露给第三方供应商,该供应商正在开发php中的Web界面。当他尝试发出请求时,他会收到400 Bad Request错误,当WCF尝试解析他的xml时,会查看跟踪错误。

我得到的错误信息是:

Unable to deserialize XML body with root name 'BusinessTaxReturn' and root namespace '' (for operation 'RunCalculations' and contract ('IMyService',  'http://tempuri.org/')) using DataContractSerializer. 
Ensure that the type corresponding to the XML is added to the known types collection of the service.

我假设WCF正在包装我的客户端发送的消息,然后在服务收到消息时尝试解包它。这让我有两个问题:

  1. WCF用什么包装XML消息?
  2. 解决此问题的最佳方法是什么?我应该让客户端包装他们的消息,还是我真的应该尝试使用DataContract?

1 个答案:

答案 0 :(得分:0)

要做到这一点,请使用HTTP调试代理(如Fiddler)监视WCF客户端发送给WCF服务器的消息,并将这些消息与PHP应用程序发送的消息进行比较。