Question

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

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top