Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我会得到一个“a”;401-未经授权;向WCF服务发送文件字节流时出错?_C#_Wcf_Silverlight_Iis 7 - Fatal编程技术网

C# 为什么我会得到一个“a”;401-未经授权;向WCF服务发送文件字节流时出错?

C# 为什么我会得到一个“a”;401-未经授权;向WCF服务发送文件字节流时出错?,c#,wcf,silverlight,iis-7,C#,Wcf,Silverlight,Iis 7,我有一个WCF服务,从Silverlight客户端调用II7上托管的basicHttp绑定。我可以毫无问题地调用端点上的所有服务 除了一个 我正在尝试上载文件,以便服务接收字节数组。如果我上传的文件大小超过3MB,我会得到下面的错误 当我尝试呼叫此服务时: [OperationContract] public AuditResponse UploadVendorAuditFile( int vendorID,

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

我正在尝试上载文件,以便服务接收字节数组。如果我上传的文件大小超过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>

确保您在WCF服务的绑定中设置了最大邮件大小

例如:

<binding name="xxx" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="50000000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>


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

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

还考虑在Service行为中添加MaxItMeNoSosialCurras,如

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

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

另外,请尝试在web.config中设置以下设置

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


失败的文件大小是否大于1MB左右?还可以尝试启用跟踪()以了解错误的实际原因。如果文件较大,则可能是由于读卡器配额设置的原因,需要在服务器和客户端上设置较大的值。我发布了我的服务配置和客户端配置。它们似乎配置正确。我现在注意到,当一个文件超过3MB时,就会出现这种情况。查看更新以设置httpRuntime maxRequestLength属性我自己都不知道这一点。WCF很难配置。