我正在编写一个WCF服务存根来“模仿”现有的VB6服务。存根需要接受一个字符串的参数,执行一些逻辑并返回一个字符串。
我遇到的问题是在服务合同上给出以下方法
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "lookup")]
string LookupItem(string requestXml);
当我在fiddler中发布消息时,我收到错误
服务器遇到错误 处理请求。例外 消息是'无法反序列化XML 具有根名称'XmlRoot'和 root namespace''(用于操作 'LookupItem'和合同 ( 'IServiceStub', 'http://tempuri.org/'))使用 DataContractSerializer的。确保这件事 与XML对应的类型是 添加到已知类型的集合中 服务。'。
WCF是否尝试将我的XML反序列化为对象,即使我不想要它?字符串以text / xml格式发送,因为它模仿的服务必须以text / xml的形式接收POST。有什么我想念的吗?
答案 0 :(得分:0)
用以下内容克服了这个问题:
public Stream LookupItem(Message requestXml)
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
string responseXml = "<whatever />";
return new MemoryStream(Encoding.UTF8.GetBytes(responseXml ));
}