0

从我的客户端 silverlight 应用程序调用我的 WCF 服务,我有时会收到一个 ProtocolException:

内容类型 text/html;响应消息的 charset=UTF-8 与绑定的内容类型不匹配 (text/xml; charset=utf-8)。

通常,我可以进入 WCF 服务代码并查看它构建一个对象,然后以序列化形式返回它。

但是,当请求超过 ~4MB(由 Fiddler2 报告)时,不会命中 WCF 服务代码中的断点,并且响应的内容(序列化对象应该在的位置)是您看到的标准 HTML 页面的 HTML如果您浏览到服务 - 看起来像这样的服务:

服务介绍页面

我可以通过向请求对象图中的字符串随机添加字符或从图中修剪块来使任何请求失败或成功,因此我相当有信心这与请求的大小有关。

如果有人能解释为什么响应包含 HTML ,我将非常感激,如果您能告诉我如何修复它,我将更加感激。

我正在使用VS2010。我的服务器端配置是:

<httpRuntime executionTimeout="10800"
               maxRequestLength="10240" />

...

<system.web>
    <httpRuntime maxRequestLength="2147483647" />
</system.web>

...

<serviceBehaviors>
    <behavior name="StandardServiceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
</serviceBehaviors>

...

<binding name="BasicHttpBinding_SilverlightService"
         useDefaultWebProxy="false"
         transferMode="Streamed"
         bypassProxyOnLocal="true"
         receiveTimeout="00:20:00"
         sendTimeout="00:20:00"
         maxBufferSize="2147483647"
         maxReceivedMessageSize="2147483647"
         maxBufferPoolSize="2147483647">
    <readerQuotas maxStringContentLength="2147483647"
                  maxArrayLength="2147483647"
                  maxBytesPerRead="2147483647"
                  maxDepth="2147483647"
                  maxNameTableCharCount="2147483647"/>
    <security mode="TransportCredentialOnly">
        <transport clientCredentialType="None"/>
    </security>
</binding>

客户端我有:

<binding name="BasicHttpBinding_SilverlightService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
    <security mode="None" />
</binding>

更新

正如这篇文章所建议的,我还尝试从绑定标签中删除名称。

4

1 回答 1

1

你有没有看过这个帖子:

http://smehrozalam.wordpress.com/2009/01/29/retrieving-huge-amount-of-data-from-wcf-service-in-silverlight-application/

您显然已经涵盖了 dataContractSerializer 部分,只是想知道是否缺少其他任何内容。

于 2013-10-01T08:36:22.820 回答