私は現在、C#との通信でwshttpdualbinding
を使用しているクライアント/サーバプログラムで作業しています。だから私はサーバーからこのバインディングを介してwebservicesを呼び出しています。wsDualHttpBindingはサーバにリクエストを送信していません
すべてうまくいきましたが、最終日に私は次の問題に遭遇しています。サーバからサービスを呼び出すと、クライアントは動作を停止して反応を停止します。何もクライアントから送信されません。
それは大きなプロジェクトですので、私は、あまり投稿することはできませんが、私は最高のスニペット投稿してみましょう:
結合:
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_AuthenticationService" closeTimeout="03:10:00"
openTimeout="03:10:00" receiveTimeout="03:10:00" sendTimeout="03:10:00"
bypassProxyOnLocal="false" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
useDefaultWebProxy="true" allowCookies="false" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" >
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
<wsDualHttpBinding>
<binding name="WSDualHttpBinding_Service" closeTimeout="03:10:00"
openTimeout="03:10:00" receiveTimeout="03:10:00" sendTimeout="03:10:00"
bypassProxyOnLocal="false" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
useDefaultWebProxy="true" messageEncoding="Text" textEncoding="utf-8" >
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</wsDualHttpBinding>
</bindings>
問題原因コード:
Clusterrationalemapping cr = new Clusterrationalemapping
{
Textbricks = rationale,
Cluster = cluster,
Project = CurrentProject
};
var clusterrationaleId = 0;
if (cluster.AddClusterRationaleMapping(cr))
{
clusterrationaleId = _service.SaveItem(cr);
cr.Id = clusterrationaleId;
if(rationale.Clusterrationalemappings == null) rationale.Clusterrationalemappings = new List<Clusterrationalemapping>();
rationale.Clusterrationalemappings.Add(cr);
}
を
特定のクラスターに対して新しいclusterrationalemapping
を作成する関数が呼び出されます。 rational
とCurrentProject
の変数は常に同じです。ちょうどクラスタは異なっています。 ほとんどすべての場合、service.SaveItem
は期待どおりに新しいIDを返します。しかし、1つの特別なクラスタでは機能しません。 service.SaveItem
は、私が何らかの例外が発生するまで(サーバは時間内に応答しなかった/応答しなかった)まで、ツールを停止してフリーズします。
私はwsDualHttpBinding
が正しく設定されていると確信しています。もし私がProject = CurrentProject
という行をコメントアウトし、Project = new Project();
と置き換えると、このクラスタではすべてがうまくいきます。
だから、clusterrationalmapping
が送信するには大きすぎるようです。しかし、例外はそれを言っているわけではありません。そして私はそれをサーバから手に入れました。
デバッグ目的でMicrosoft Service Trace Viewerを使用しましたが、エンドポイントに到達できなかったという例外がすぐにスローされることがあります。だから私はかなりオブジェクトがシリアル化するときにサービスが死ぬことを確信しています。
サービスにデバッグして、いつ、それが失敗するのかを正確に、よりよく確認する方法はありますか?
ご協力いただきありがとうございます。