发送大字节数组时出错

时间:2011-05-26 11:33:56

标签: silverlight wcf

我有WCF服务,通过它我在DB中添加数据。它工作正常,但当我尝试发送大字节[]时,它返回“远程服务器返回错误:NotFound”。

的web.config

    <?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="JabsBaseConnectionString" connectionString="Data Source=TAHASAGHIR-PC\SQLEXPRESS;Initial Catalog=JabsBase;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <httpRuntime maxRequestLength="2097151" useFullyQualifiedRedirectUrl="true"/>
  </system.web>
  <system.serviceModel>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <binding name="SendLargeChat"
                 allowCookies="false"
                 bypassProxyOnLocal="false" 
                 maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647"
                 maxBufferSize="2147483647"
                 closeTimeout="10:00:00"
                 openTimeout="10:00:00"
                 receiveTimeout="10:00:00"
                 sendTimeout="10:00:00"
                 transferMode="Streamed">
          <readerQuotas 
            maxArrayLength="2147483647"
            maxBytesPerRead="2147483647"
            maxDepth="2147483647"
            maxNameTableCharCount="2147483647"
            maxStringContentLength="2147483647" />
        </binding>
      </basicHttpBinding>      
    </bindings>
    <services>
      <service name="Prototype.SendChatService" behaviorConfiguration="Prototype.SendChatServiceBehavior">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="SendLargeChat" contract="Prototype.SendChatService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>      
    </services>    
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="Prototype.SendChatServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

ServiceReferences.ClientConfig

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>        
        <binding name="BasicHttpBinding_ISendChatService" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647">
          <security mode="None" />
        </binding>
      </basicHttpBinding>      
    </bindings>
    <client>      
      <endpoint address="http://localhost:53756/PrototypeSite/SendChatService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISendChatService"
        contract="SendChatService.ISendChatService" name="BasicHttpBinding_ISendChatService" />
    </client>
  </system.serviceModel>
</configuration>

请求 POST http://localhost:53756/PrototypeSite/SendChatService.svc HTTP / 1.1 主持人:localhost:53756 连接:保持活力 推荐人:http://localhost:53756/PrototypeSite/ClientBin/Prototype.xap 内容长度:1348176 soapaction:“http://tempuri.org/ISendChatService/addMsg” content-type:text / xml;字符集= utf-8的 接受: / 用户代理:Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 534.24(KHTML,与Gecko一样)Chrome / 11.0.696.68 Safari / 534.24 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8 Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3

响应 HTTP / 1.1 400错误请求 服务器:ASP.NET Development Server / 10.0.0.0 日期:2011年5月26日星期四17:48:00 GMT X-AspNet-Version:4.0.30319 缓存控制:私有 内容长度:0 连接:关闭

6 个答案:

答案 0 :(得分:2)

404 / Not Found是Silverlight针对所有服务器错误报告的错误。如果您想知道从服务器返回的实际错误,您可以使用Fiddler之类的内容来查看正在发送和接收的内容,包括包含服务器返回的实际错误代码和错误消息的标头。

答案 1 :(得分:1)

我认为你应该应用相同的

<readerQuotas ...

在客户端上。

答案 2 :(得分:1)

尝试将executionTimeout设置添加到HTTPRuntime设置

<httpRuntime executionTimeout="110" maxRequestLength="..." />

答案 3 :(得分:1)

根据我的经验,我收到错误,因为即使服务器上的服务配置为接收大量数据,http运行时也没有。确保httpRuntime具有适当的maxRequestLength。

答案 4 :(得分:1)

您还可以打开WCF日志记录以获取更多信息。将以下内容添加到web.config:

<system.diagnostics>
    <sources>
        <source name="System.ServiceModel"
                  switchValue="Information, ActivityTracing"
                  propagateActivity="true">
            <listeners>
                <add name="traceListener"
                     type="System.Diagnostics.XmlWriterTraceListener"
                     initializeData= "c:\log\Traces.svclog" />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

答案 5 :(得分:0)

抱歉我的答案错了!! IGNORE IT

我会在几个小时内删除它,只允许有评论的人看到它。

在SOAP中发送字节数组。

每个字节将以<byte>128</byte>或类似方式传输,这意味着它平均需要10倍。

使用 base64 字符串 - 所以将您的属性定义为字符串并将其填充为base64字符串。