【问题标题】:WCF service hosting on IIS 6IIS 6 上的 WCF 服务托管
【发布时间】:2013-07-08 07:26:42
【问题描述】:

我有一个 .net 4.0 WCF REST 服务,它在 Windows 7 IIS 7 上本地运行得非常好, 但是当我尝试在运行 Windows Server 2003 并具有 IIS 6 的 QA 服务器上部署它时,我开始收到错误请求错误。 我已经尝试过this 解决方案,但它对我不起作用。 我发送到服务器的 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 得到了正确的响应

解决方案: here

【问题讨论】:

  • 您在尝试从浏览器、WCF 测试客户端或在您自己的代码中调用 WCF 服务时是否遇到错误?另外,您是否介意发布一些异常详细信息以显示有关错误请求的更多信息。
  • 我在浏览器中点击服务地址时没有错误,但是当我尝试从我的 c# 应用程序调用 POST 方法时,我得到“服务器响应:错误请求”
  • 您是否将 IIS6 中 virtaul 目录的应用程序池设置为 4.0?
  • 如何在 IIS 6 上做到这一点?我已经右键单击虚拟目录 -> 属性 -> ASP.NET -> 版本 = 4.0
  • 参考这个link

标签: c# wcf iis-6


【解决方案1】:

有两种可能:

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

试试这个:

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

【讨论】:

  • 我在两台计算机上都安装了 .net 4.0,因此,可能排除了第二种可能性。你能解释一下第一种可能性是什么意思吗?
  • 对于第一种可能性,检查两台机器上 dll 上的时间戳是否相同。在第二个中,仅仅因为安装了 .net 4 并不意味着它正在被使用。
  • 代码相同,库相同。我现在完全不知道该怎么办。
【解决方案2】:

我一直在努力解决的问题是没有设置消息的单个文本字段的最大长度。我假设,如果值为 0,则 IIS 采用某种默认值,对于 IIS 7 来说,它比 IIS 6 大,幸运的是,对于我的 XML 消息来说已经足够了。 请参考this链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-13
    • 2012-07-06
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多