1

通信にtcpを使用するWCFサービスがあります。クライアントからサービスにファイルを転送しようとするとき、クライアントとサービスの構成ファイルが URL に localhost を使用する同じコンピューターでそれを行う場合、問題はありません。

ただし、クライアントがLAN内の他のコンピューターにあるときに同じことをしようとすると、次の例外が発生します。

System.TimeoutException: net.tcp://192.168.1.5:7997/CMMSHost に送信されたこの要求操作は、構成されたタイムアウト (00:01:00) 内に応答を受け取りませんでした。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。これは、サービスがまだ操作を処理中であるか、サービスが応答メッセージを送信できなかったことが原因である可能性があります。(チャネル/プロキシを IContextChannel にキャストし、OperationTimeout プロパティを設定することによって) 操作のタイムアウトを増やすことを検討し、サービスがクライアントに接続できることを確認してください。

ただし、情報を検索したり、レジスタを追加したり、その他の種類の操作など、他のアクションを使用しようとすると、アプリケーションは正常に動作します。

したがって、問題はファイルの転送にあります。

サービスでは、次の構成を使用します。

<endpoint address=""
                  binding="netTcpBinding"
                  bindingConfiguration="tcpBinding"
                  name="NetTcpBindingEndpoint"
                  contract="GTS.CMMS.Service.IService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint contract="IMetadataExchange" binding="mexTcpBinding" address="net.tcp://localhost:5000/mex" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorConfig">
          <!--
          <serviceMetadata httpGetEnabled="true" />-->
          <!--Necesario para poder enviar excepciones desde el servicio al cliente.-->
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="100" />
          <serviceMetadata/>
        </behavior>
      </serviceBehaviors>
    </behaviors>


    <bindings>
      <netTcpBinding>
        <binding name="tcpBinding" maxBufferSize="67108864"
                      maxReceivedMessageSize="67108864" maxBufferPoolSize="67108864"
                       transferMode="Buffered" closeTimeout="00:00:10"
                       openTimeout="00:00:10" receiveTimeout="00:20:00"
                       sendTimeout="00:01:00" maxConnections="100">
          <security mode="None"/>
          <readerQuotas maxArrayLength="67108864" maxBytesPerRead="67108864" maxStringContentLength="67108864"/>
          <reliableSession enabled="true" inactivityTimeout="00:20:00" />
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>  

そしてクライアントで:

<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_IService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
          maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:20:00"
            enabled="true" />
          <security mode="None">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <messa

ge clientCredentialType="Windows" />

ありがとう。

4

1 に答える 1

2

あなたのアプリケーションは、kbs 単位の小さなサイズのファイルでうまく機能していますか? はいの場合、より大きなサイズのファイルには、transferMode="Buffered" の代わりに transferMode="Streamed" を使用します。それに応じて構成を変更する必要があります。

アプリケーションがさらに小さなファイルでも機能しない場合は、アプリケーションに問題があります。アプリケーションをビルドしてプロキシを再生成し、アプリケーションのデバッグを試みます。

これらのリンクを参照することもできます http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTP http://www.codeproject.com/Articles/33825/WCF-TCP -based-File-Server

于 2012-06-25T12:26:58.860 に答える