クライアント/サーバーWCFを作成しました。私が望むのは、このクライアントからサーバーにメッセージを送信し、何らかの理由で接続が切断された場合です。例えば、クライアントがシャットダウンすると、このクライアントは再び利用可能になったときにどのように応答することができますか?接続切断後にWCFの信頼できるメッセージングでサーバーから応答を受け取る方法
クライアントとサーバーの間にセッションなどを設定することはできますか?
私のクライアントコードは次のとおりです。
private static void Main(string[] args)
{
var client = new FlipCaseServiceClient("ReliableMessageService");
var sd = new StringData { FirstName = "Turgut", LastName = "Kançeltik" };
var fullName = client.GetFullName(ref sd);
Console.WriteLine(fullName);
}
マイServerのコードは次のとおりです。
要約で[DeliveryRequirements(RequireOrderedDelivery = true)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class FlipCaseService : IFlipCaseService
{
public string GetFullName(ref StringData stringData)
{
var fullName = $"{stringData.FirstName} {stringData.LastName}";
stringData.FullName = fullName;
return fullName;
}
}
とサーバーの構成:ここ
<service behaviorConfiguration="ServiceBehaviorMetaData" name="FlipCaseService.FlipCaseService" >
<endpoint name="ReliableMessageService" address="flipcase/wsAddress" binding="wsHttpBinding" bindingConfiguration="BindingReliableMessaging" contract="FlipCaseService.IFlipCaseService" >
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
<bindings>
<wsHttpBinding>
<binding name="BindingReliableMessaging">
<reliableSession enabled="true" inactivityTimeout="00:10:00"/>
</binding>
</wsHttpBinding>
</bindings>
<behavior name="ServiceBehaviorMetaData">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/flipcase/metadata" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
失敗した場合にコールを再試行できませんでしたか? – Evk
私はサーバー上で同じことをもう一度進めたくありません。 –
WCFサービスはデフォルトではステートレスです。これはサービスの性質ですが、stateを使用できます。とにかく、あなたのシナリオでは、次回の呼び出しで結果をキャッシュすることを解決し、再度処理することを避けることができると思います。 –