wsHttpBindingを使用してインターネット経由でDTOオブジェクトのリストを送信するのにかかる時間を短縮しようとしています。セキュリティは、X509証明書を持つTransportWithMessageCredentialです。リスト内の500個のオブジェクトの場合、時間は約2.5秒です。セキュリティを持たないbasicHttpBindingを使用すると、数ミリ秒しか保存されません。WCFのパフォーマンス転送wsHttpBindingを使用したオブジェクトのリスト
messageEncodingをMtomに変更すると、さらに遅くなるようです。私はトレースを追加し、svcTraceViewerを使用してファイルを表示し、メッセージが送信された後、最長の時間は "サーバーセキュリティセッションがクライアントからのクローズメッセージを受信しました"というアクティビティ境界があった後1.5秒でした。 400ms。
私は、次のコンテキストを追加していると並行性は、私は時間を短縮するために、データメンバーに名を追加した、DTOクラスでは、サービスクラス
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession,ConcurrencyMode=ConcurrencyMode.Multiple)]
に属性をデシリアライズ
[Serializable]
[DataContract(Name="Sample")]
public class Sample
{
[DataMember(Name="Id")]
public int Id { get; set; }
Web.Configファイルのサービスでは、動作は
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceThrottling maxConcurrentCalls="300" maxConcurrentSessions="5000" maxConcurrentInstances="300" />
</behavior>
<behavior>
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
クライアントWeb.Config hです。
<behavior name="MyBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<clientCredentials>
<clientCertificate findValue="xxxxxxx" storeLocation="LocalMachine" x509FindType="FindByThumbprint" />
</clientCredentials>
</behavior>
を設定
<wsHttpBinding>
<binding name="MyEndpoint"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
bypassProxyOnLocal="false"
transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288"
maxReceivedMessageSize="2147483647"
messageEncoding="Mtom"
textEncoding="utf-8"
useDefaultWebProxy="false"
allowCookies="false" >
<readerQuotas
maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<reliableSession
ordered="true"
inactivityTimeout="00:10:00"
enabled="false" />
<security mode="TransportWithMessageCredential">
<transport
clientCredentialType="None" />
<message
clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
と行動の結合は、任意の提案は、これは、高速かつスケーラブルであることを取得する方法があるので?
解決策 私たちが想定していたようにgzipは実際にIISにインストールされていないことが判明しました。私は間違いなく、生産のためのMarc Gravellのprotobuf-netをテストしていますが、gzipはすぐに問題を解決しました。
オブジェクトの大きさはどれくらいですか?データはどれくらいの量のデータとなりますか?これはローカルかリモートですか。ユーザーはどのくらい遠いですか? –
これは、インターネットのWindows 2008 r2サーバーのiis 7クライアントとサーバーの両方です。私はデータサイズを測定していないが、これを最も良くするだろうか?オブジェクトは18文字列とintフィールドで、各オブジェクトはメッセージxmlの約900文字です。 –