【发布时间】:2016-02-26 21:28:31
【问题描述】:
我正在使用以下方法将Message对象转换为HttpRequestMessage
HttpRequestMessage shadowRequestMessage = Message.ToHttpRequestMessage();
扩展方法的实现见以下链接,由.NET framework提供
MessageExtensionMethodsToHttpRequestMessage 方法
当我调用ToHttpRequestMessage 方法时,它给了我以下异常
{"Expecting element 'Stream' from namespace 'http://schemas.datacontract.org/2004/07/System.IO'.. Encountered 'Element' with name 'SayHello', namespace 'http://tempuri.org/'. "}
这是 Message 对象的值:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:38405/OriginalService.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IOriginalService/SayHello</Action>
</s:Header>
<s:Body>... stream ...</s:Body>
</s:Envelope>
失败堆栈跟踪:
at System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader reader)
at System.ServiceModel.Channels.Message.GetBodyCore[T](XmlDictionaryReader reader, XmlObjectSerializer serializer)
at System.ServiceModel.Channels.MessageExtensionMethods.CreateMessageContent(Message message, Boolean suppressEntityBody)
at System.ServiceModel.Channels.MessageExtensionMethods.CreateRequestMessage(Message message, HttpRequestMessageProperty requestMessageProperty)
at System.ServiceModel.Channels.MessageExtensionMethods.ToHttpRequestMessage(Message message)
这是示例应用程序:
[ServiceContract]
public interface IOriginalService
{
[OperationContract]
string SayHello();
}
public class OriginalServiceSvc : IOriginalService
{
public string SayHello()
{
return "Hello";
}
}
谁能解释一下我该如何解决这个问题?
【问题讨论】:
-
你需要提供抛出异常的代码,你的服务实现是相当无关紧要的。
-
@CodingGorilla 此方法导致问题:HttpRequestMessage shadowRequestMessage = Message.ToHttpRequestMessage();此扩展方法由 .NET 库 referencesource.microsoft.com/#System.ServiceModel.Channels/… 提供。我也将此信息添加到问题中。让我知道我是否缺少任何东西。谢谢
标签: c# .net wcf serialization httprequest