我有一个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>
答案 0 :(得分:1)
它失败的文件大小是否大于1MB左右?尝试启用tracing以了解错误的实际原因。
如果文件的大小较大,则可能是因为读取器配额设置需要在服务器端和客户端
上设置较大值另外考虑在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>
答案 1 :(得分:0)
确保在WCF服务的绑定中设置最大邮件大小..
例如:
<binding name="xxx" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="50000000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>