IClientMessageInspectorにいくつかの操作ログを記録する必要があり、操作の開始と終了が重要であることがわかっています。しかし、私はAfterReceiveReplyを一方向の操作で得ることはできませんが、それはなぜか分かりません。 BeforeSendRequestのオーバーロードで操作が片方向であることを知る方法はありますか?私はそれを無視できますか?IClientMessageInspectorは片方向操作を検出します
0
A
答えて
1
インスペクタ自体(またはBeforeSendRequestに渡されるメッセージ)に関する情報はありませんが、この情報をインスペクタに渡して、メッセージアクションを使用して操作が一方向かどうかを確認できます。自分自身への返信
public class StackOverflow_10354828
{
[ServiceContract]
public interface ITest
{
[OperationContract]
string Echo(string text);
[OperationContract(IsOneWay = true)]
void Process(string input);
}
public class Service : ITest
{
public string Echo(string text)
{
return text;
}
public void Process(string input) { }
}
class MyInspector : IClientMessageInspector
{
public HashSet<string> oneWayActions;
public MyInspector(ServiceEndpoint endpoint)
{
this.oneWayActions = new HashSet<string>();
foreach (var operation in endpoint.Contract.Operations)
{
if (operation.IsOneWay)
{
oneWayActions.Add(operation.Messages[0].Action);
}
}
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
Console.WriteLine("In AfterReceiveReply");
}
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
Console.WriteLine("In BeginSendRequest");
if (this.oneWayActions.Contains(request.Headers.Action))
{
Console.WriteLine("This is a one-way operation");
}
return null;
}
}
class MyBehavior : IEndpointBehavior
{
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(new MyInspector(endpoint));
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), "");
host.Open();
Console.WriteLine("Host opened");
ChannelFactory<ITest> factory = new ChannelFactory<ITest>(new BasicHttpBinding(), new EndpointAddress(baseAddress));
factory.Endpoint.Behaviors.Add(new MyBehavior());
ITest proxy = factory.CreateChannel();
proxy.Echo("Hello");
Console.WriteLine();
proxy.Process("world");
Console.WriteLine();
((IClientChannel)proxy).Close();
factory.Close();
Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}
1
は、現時点では私はこれやってる:
ブールisOneWay = request.Headers.ReplyTo == nullを。
関連する問題
- 1. WCFで片方向操作契約を呼び出せません
- 2. 片方向ピボットページング
- 3. HABTMは片方向でしか動作しません
- 4. Laravel belongsToManyは片方向でしか動作しません。
- 5. バックボーンルーティングは、順方向か逆方向かを検出します
- 6. EJBに片方向接続を作成する方法はありますか?
- 7. wpfコントロールのバックグラウンド双方向バインディングは片方向でしか動作しません
- 8. 行方向の行列操作はR
- 9. ハードウェアキーで長押し(ホールド)操作を検出する方法
- 10. Goで片方向チャンネルを作成するポイント
- 11. ユーザーの操作を検出する
- 12. 双方向ANOVAの片方向ANOVAデータをR
- 13. VS 2010で片方向ワークフローサービスをデバッグする方法は?
- 14. Webサービスの一方向操作C#
- 15. WCF -IsOnewayが片道操作のように動作しない
- 16. パブリックドメイン情報の片方向Android SyncAdapter
- 17. divの片側のみを操作しようとしています
- 18. 片方向または背面のピン番号
- 19. CKEditor領域の検出と操作
- 20. 画像操作コード(コーナー検出)
- 21. cocos2d ccTouchMovedは片側のみのスプライトのコリジョンを検出します
- 22. スワイプのジェスチャー方向を検出する方法は?
- 23. Libgdxでスワイプ方向を検出する方法は?
- 24. WP7 XNAでHorizontalDragの方向を検出する方法は?
- 25. TCP接続は片方向のデータしか受信しません
- 26. 私の方向を断片に戻したい。
- 27. は作成プロセスを検出します
- 28. WPFマウスホイールの方向検出とストーリーボード
- 29. 移動方向に対する電話の向きを検出する方法
- 30. JavaScriptでデバイスの向きを検出する方法は?