0

Silverlight クライアントから呼び出される II7 でホストされている basicHttp バインディングを持つ WCF サービスがあります。1 つを除いて、問題なくエンドポイントのすべてのサービスを呼び出すことができます。

サービスがバイト配列を受け取るようにファイルをアップロードしようとしています。サイズが 3MB を超えるファイルをアップロードすると、次のエラーが発生します。

このサービスを呼び出そうとすると:

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

次のエラーが表示されます。

401 - Unauthorized: 認証情報が無効なため、アクセスが拒否されました。指定した資格情報を使用してこのディレクトリまたはページを表示する権限がありません。

これが私の構成です。

エンドポイントのバインディング

<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 に答える