0

我有一个 WCF 服务,其中托管在 II7 上的 basicHttp 绑定从 Silverlight 客户端调用。我可以毫无问题地调用端点上的所有服务,除了一个。

我正在尝试上传文件,以便服务接收字节数组。如果我上传大小超过 3MB 的文件,我会收到以下错误。

当我尝试调用此服务时:

[OperationContract]
public AuditResponse UploadVendorAuditFile( int vendorID, 
                                            int sourceSystemID, 
                                            string fileName,
                                            byte[] fileBytes )
{
    // stuff
}

我收到以下错误:

401 - 未经授权:由于凭据无效,访问被拒绝。您无权使用您提供的凭据查看此目录或页面。

这是我的配置。

端点绑定

<basicHttpBinding>
  <binding 
    name="basicHttpBindingConfiguration" 
    maxBufferSize="2147483647"
    maxBufferPoolSize="2147483647" 
    maxReceivedMessageSize="2147483647"
    >
    <readerQuotas 
    maxDepth="2147483647" 
    maxStringContentLength="2147483647"
    maxArrayLength="2147483647" 
    maxBytesPerRead="2147483647" 
    maxNameTableCharCount="2147483647" 
    />
    <security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
    </security>
  </binding>
</basicHttpBinding>

服务配置

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

客户

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding 
              name="BasicHttpBinding_WMService" 
              maxBufferSize="2147483647"
              maxReceivedMessageSize="2147483647"
              >
                <security mode="TransportCredentialOnly" />
            </binding>
        </basicHttpBinding>
    </bindings>
4

2 回答 2

1

它失败的文件的大小是否大于 1MB 左右?尝试启用跟踪 以了解错误的实际原因。

如果文件较大,则可能是读取器配额设置的原因,需要在服务器端和客户端设置更大的值

还可以考虑在您的 serviceBehaviour 中添加 maxItemsInObjectGraph,如图所示

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

注意:确保在客户端和服务器端具有相同的 readerQuotas 设置

还尝试在您的 web.config 中设置以下设置

<system.web>  
     <httpRuntime maxRequestLength ="32768"/>
  </system.web>  
于 2012-05-11T16:21:05.643 回答
0

确保在 WCF 服务的绑定中设置最大消息大小。

例如:

<binding name="xxx" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="50000000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
于 2012-05-11T16:08:15.727 回答