2

ファイルを転送するための WCF サービスを作成しています。私は基本的な WCF の理解しかなく、MSDN チュートリアルに従いました: WCF チュートリアル ファイルの転送にバイト配列の使用を開始しましたが、ファイルが少し大きくなるとすぐに (100kb で十分でした)、不適切な要求で失敗します。私は別のガイドに従い、メッセージ付きのストリーミングに変更しました。小さなファイルでも機能しますが、古いバージョンのような大きなファイルでは失敗します。svcutil.exe によって生成されたファイルにはストリーミングについて何も書かれていないため、構成ファイルに問題があると思われます。これは私のクライアントの app.config です:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="WSHttpBinding_IDocPublisher" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="200000000" maxReceivedMessageSize="200000000"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                allowCookies="false">
                <readerQuotas maxDepth="200000000" maxStringContentLength="200000000" maxArrayLength="200000000"
                    maxBytesPerRead="200000000" maxNameTableCharCount="200000000" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00"
                    enabled="false" />
                <security mode="Message">
                    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="Windows" negotiateServiceCredential="true"
                        algorithmSuite="Default" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:8000/ServiceModelSamples/docPublisherWebService/docPublisher"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDocPublisher"
            contract="IDocPublisher" name="WSHttpBinding_IDocPublisher">
            <identity>
                <userPrincipalName value="Emil-PC\Emil" />
            </identity>
        </endpoint>
    </client>
</system.serviceModel>
</configuration>

そして、これはサーバーのapp.configです

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"
                          httpHelpPageEnabled="true" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="serviceBehavior"
              name="DocPublisher">
    <endpoint address="http://localhost:8000/ServiceModelSamples/docPublisherWebService"
              name="basicHttpStream"
              binding="basicHttpBinding"
              bindingConfiguration="httpLargeMessageStream"
              contract="IDocPublisher" />
    <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange"/>
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="httpLargeMessageStream"
                maxReceivedMessageSize="200000000"
                maxBufferSize="200000000"
                transferMode="Streamed"
                messageEncoding="Mtom" />
  </basicHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
4

2 に答える 2

1

構成ファイルが本当の問題ではないことが判明しました。問題は、msdn チュートリアルが app.config を使用せず、メイン メソッドでエンドポイントを作成するため、サーバー app.config が使用されなかったことです。

于 2013-03-15T10:44:30.027 に答える