0

.NET WeBServiceプロジェクトと、別のプロジェクトからのそれへの参照があります。Visual Studioは、Webサービスのすべてのメソッドを使用してプロキシクラス(SoapHttpClient)を生成します。私がWebServiceを使用しているプロジェクトは、.NETCFモバイルアプリケーションです。これは、インターネットアクセスとWebサービスが常に利用できるとは限らないことを意味します。私がする必要があるのは、モバイルからWebサービスへのすべての要求が最終的にそれに到達することを保証することです。これを行うには、実行が成功するまでWebリクエストをシリアルに実行するワーカースレッドでWebServiceへのすべてのリクエストをキューに入れます。問題は、生成されたプロキシクラスにすべてのWebメソッドが指定されていることです。後で使用するために保存できるメソッドから、一般的な「Web要求オブジェクト」を「抽出」できるメカニズムはありません。名前とパラメーターを使用して、Webメソッドを明示的に呼び出す必要があります。これは私のコードをコンパイルします。私の質問は-.NETWebServicesに、Webリクエストをオブジェクトとして「抽出」して後で使用するメカニズムはありますか?

よろしく

ドミニク

4

1 に答える 1

1

私の知る限り、.NETで生成されたプロキシは、必要なWeb要求オブジェクトを提供しません。ただし、要求情報を格納するための単純なプロキシを自分で作成し、後で.NETプロキシ(またはSoapHttpClientProtocolクラス)を使用してWeb要求を行うことができます。以下はサンプルテンプレートコードです。

public class MyRequest
{
    public MyRequest(string methodName, params object[] parameters)
    {
        this.MethodName = methodName;
        this.Parameters = parameters;
    }

    public string MethodName { get; set; }
    public object[] Parameters { get; set; }

    public object[] Response {get; set;}
}

public class MyProxy : dotNetGeneratedServiceProxy
{
    List<MyRequest> Requests { get; set; }

    public void QueueMethod1(int param1, string param2)
    {
        Requests.Add(new MyRequest("Method1", param1, param2));
    }

    public void QueueMethod2(string param1)
    {
        Requests.Add(new MyRequest("Method2", param1));
    }

    public void RunAllRequests()
    {
        foreach (var request in Requests)
        {
            var result = this.Invoke(request.MethodName, request.Parameters);
        }
    }
}

これがあなたにアイデアを与えることを願っています。

于 2010-08-16T11:15:08.603 に答える