1

サーバーの IIS 7.5 でホストされている WCF サービスがあります。サービスで Entity Framework 5.0 を使用しました。

サービス参照を追加し、サイトにクライアントを作成して、ローカル システムからそのサービスを呼び出すと、応答を取得するのに約 40 秒かかります。ローカルにある同じサービスを呼び出してみましたが、ここでは 3 ~ 4 秒しかかかりません。

サーバー上のサービスへの参照をローカル システム上のサイトに追加すると、Web 構成に追加されたバインディングとエンドポイントは次のようになります。

<binding name="WSHttpBinding_IMyWCFService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:50:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
          messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
          allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
            maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true" />
          </security>
        </binding>




<endpoint address="https://<url>/MyWCFService.svc/soap"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyWCFService"
        contract="MerchantService.IMyWCFService" name="WSHttpBinding_IMyWCFService" />

最初はEntityフレームワークの問題だと思いました。しかし、その後、エンティティ フレームワーク プロファイラーを使用してメソッドの実行時間を確認しました。1秒もかかりません。

また、サービスを呼び出すときに、追加するヘッダーを追加する必要があります。

それで、その40秒の時間がかかっているところ。また、起動が遅くなったり、最初だけ時間がかかったりすることもありません。いつもこれだけ時間がかかります。

ネットワーク速度がこの遅延の原因になる可能性があります。はいの場合、どの程度までですか?

サービスはリスト List を返します。リストを返すべきではないということは問題でしょうか。代替案は何ですか?

また、Entityフレームワークは、リクエストが来るたびにDBへの接続を確立し、データベースへの接続に時間がかかっているかどうかを確認します。それは可能ですか?

助けてください。ありがとう

4

3 に答える 3

1

まず、コードファーストアプローチを使用していました。また、パフォーマンスを向上させるために、ビューを事前に生成して、初めてビューを生成する際のオーバーヘッドを削減できるようにしました。しかし、ビューは機能していなかったと思います。そのため、Database First アプローチに切り替えてから、ビューを生成し、そのビルドをリモート サーバーにアップロードしました。時間が 40 秒から 10 秒に短縮されました。また、WCF サービスの起動時に DB 接続を開いてみました。そして、再び時間を5秒に短縮しました。

于 2013-03-14T04:52:04.237 に答える
0

問題を段階的に切り分けることをお勧めします

1)ネットワーク帯域幅が問題であるかどうかを確認するには、整数や文字列などの単純な値を返す単純なサービスをホストし、その応答時間を確認します。

2)ステップ1の応答時間が大幅に改善された場合は、データベースまたはリストの問題を調べます。

于 2013-03-13T05:15:22.673 に答える
0

あなたの問題は資格情報のネゴシエーションだと思います。これを確認する簡単な方法があります。セキュリティなしで同じサーバー上でサービスを実行するだけです (これが許容される場合)。

考えられる解決策の 1 つは、negoteServiceCredential 属性を false に設定して、SOAP クレデンシャル ネゴシエーションを排除することです。まず、ドメインで Kerberos が有効になっていることを確認する必要があります。

于 2013-03-13T05:22:54.843 に答える