C# 为什么我会得到一个“a”;401-未经授权;向WCF服务发送文件字节流时出错?
我有一个WCF服务,从Silverlight客户端调用II7上托管的basicHttp绑定。我可以毫无问题地调用端点上的所有服务 除了一个 我正在尝试上载文件,以便服务接收字节数组。如果我上传的文件大小超过3MB,我会得到下面的错误 当我尝试呼叫此服务时: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,
[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很难配置。