views:

34

answers:

1

Hello

I have a .NET WeBService project and a reference to it from another project. Visual Studio generates a proxy class (SoapHttpClient) with all methods of my Web Service. The project that I use the WebService from is a .NET CF mobile application. This means that Internet access and WebService is not always available. What I need to do is to assure that all requests from mobile to the Web Service will finally reach it. I want to do so by queuing all requests to WebService in a worker thread that executes the Web Requests serially until the execution succeedes. The problem is that the generated proxy class has all web methods named. There is no a mechanism that can "extract" a generic "Web Request object" from the method that I can store for later use. I have to call the Web Methods explicitly using their names and parameters. This compilcates my code. My question is - Is there a mechanism in .NET WebServices to "extract" a Web Request as an object and us it later?

Regards

Dominik

+1  A: 

To my knowledge, .NET generated proxy will not give the web request objects that you want. But you can create a simple proxy your self to store the request information and then later use .NET proxy (or SoapHttpClientProtocol class) to make the web request. Below is the sample template code:

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);
        }
    }
}

Hope this will give you an idea.

VinayC