0

クライアント プロキシを使用して 2 番目の SOAP WCF サービスを呼び出す非同期 WCF サービスがあります。SOAP Java サービスを制御することはできませんが、非同期で実行するようにサービス参照の構成を設定できます。

2番目の非同期サービスから結果を取得して、値を1番目のサービスに戻してクライアントに渡すにはどうすればよいですか??

public class AddService : IAddService
{
    // SOAP Java service reference

    ResultServiceClient proxy = new ResultServiceClient();

    public int AddNumbers(int x, int y)
    {

        // Am i on the right track here to use BeginXXX, EndXXX?
        proxy.BeginGetResult(x, y, new AsyncCallback(OnEndAdd), null);

        /// how to return a result here.??????
        return result;
    }

    void OnEndAdd(IAsyncResult result)
    {
        int result = proxy.EndGetResult(result);
    }
}
4

1 に答える 1

0
   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
    public class AddService : IAddService 
    { 
        // SOAP Java service reference 
        ManualReseEvent _resetEvent=new ManualResetEvent(false); 
        ResultServiceClient proxy = new ResultServiceClient(); 
        private int _result=-1;

        public int AddNumbers(int x, int y) 
        { 

            // Am i on the right track here to use BeginXXX, EndXXX? 
            proxy.BeginGetResult(x, y, new AsyncCallback(OnEndAdd), null); 
            _resetEvent.WaitOne(TimeSpan.FromSeconds(10);
            return _result; 
        } 

        void OnEndAdd(IAsyncResult result) 
        { 
            _result = proxy.EndGetResult(result); 
            _resetEvent.Set();
        } 
    } 

何が起きてる?

呼び出しを行い、ManualResetEvent を使用してスレッドを一時停止し、コールバックが行われるのを待ちます。ManualResetEvent は、10 秒間待機してから実行を続行するように指示されます。

ManualResetEvent には、無限の Wait() から、TimeSpan を使用する私が使用しているものまで、Wait メソッドの複数のオーバーロードがあります。_result はメンバー変数になり、最初の呼び出しメソッドから値にアクセスできるようになりました。また、「PerCall」サービス動作でサービスをマークしました。これは、このオブジェクトの新しいインスタンスが呼び出しごとにインスタンス化されることを意味します。これを行うのは、Java サービスを呼び出す間に最大 10 秒の遅延があり、他のユーザーによるこのサービスへの他の呼び出しをブロックしたくないためです。

于 2012-10-15T15:12:04.857 に答える