IIS 6上的WCF服务宿主

本文关键字:服务 宿主 WCF 上的 IIS | 更新日期: 2023-09-27 18:21:21

我有一个.net 4.0 WCF REST服务,它在Windows 7 IIS 7上本地运行非常好,但是,当我尝试在运行WindowsServer2003并具有IIS6的QA服务器上部署它时,我开始收到错误请求。我已经尝试过这个解决方案,但它对我不起作用。我发送到服务器的XML似乎没有被反序列化,我使用的是XmlSerializer。有什么想法吗?

编辑:使用Fiddler,我得到了异常详细信息:

    Request Error
      The server encountered an error processing the request. The exception message is 'There is an error in XML document (4, 354066).'. See server logs for more details. The exception stack trace is: </p>
      at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader)
   at System.ServiceModel.Dispatcher.UnwrappedTypesXmlSerializerManager.XmlSerializerXmlObjectSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName)
   at System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.ReadObject(Message message)
   at System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

xmlvalidation.com告诉我的XML是正确的,而且我在本地IIS 上使用相同的XML得到了正确的响应

解决方案:此处

IIS 6上的WCF服务宿主

有两种可能性:

  • 这可能是版本差异。您发送给服务的xml是相同的。但是IIS 6上的C#dto类不同,因此出现了反序列化错误
  • 您使用了一些数据类型(例如枚举),这些数据类型仅在使用.net framework 4的WCF中受支持

试试这个:

  • 向接受字符串并返回字符串的联系人添加一个新方法
  • 检查这是否适用于两款Mac电脑
  • 然后逐渐增加方法的复杂性,直到它与您的实际方法相匹配,在每次更改后进行测试

我遇到的问题是没有设置消息的单个文本字段的最大长度。我假设,如果该值为0,IIS将采用某种默认值,对于IIS 7来说,该值大于IIS 6,幸运的是,对于我的XML消息来说,它足够大。请参考此链接。