我正在开发一个WCF服务,我在其中使用IDispatchMessageFormatter
创建自定义MessageFormatter。
在某种程度上,我在反序列化之前编辑了来自客户端的请求消息。
public void DeserializeRequest(Message message, object[] parameters)
{
try
{
RequestMessage objRequestMessage = new RequestMessage(message);
Message objNewMessage = objRequestMessage.RecreateMessage();
this.objMessageFormatter.DeserializeRequest(objNewMessage, parameters);
}
catch (Exception ex)
{
throw ex;
}
}
它适用于所有客户端,但是对于其中一个客户端不起作用。
当客户端发送请求并调用DeserializeRequest
方法时,在DeserializeRequest
的参数中,Message
类的对象名为message
。
其中原始请求未来,但它给了我以下消息。
{...阅读正文时出错:System.Xml.XmlException:'���Z��m'包含 无效的UTF8字节。 ...}
即使在我的代码执行之前,它也会给出上述消息,即使DeserializeRequest
方法的第一行没有被执行。
我认为必须是客户端和服务器使用的编码类型不匹配。
服务
[ServiceContract(Namespace = "http://my-wcf.com/WepAPI")]
[XmlSerializerFormat]
public interface IWWRSPFWebAPIMFPService
{
[OperationContract(Action = "http://my-wcf.com/WepAPI#SayHello")]
[CMessageBehavior]
HelloReponse SayHello(HelloRequest helloRequest);
}
的app.config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6.2"/>
<httpRuntime targetFramework="4.5.2"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>