.NET Web服务 - 管理Web请求

时间:2010-08-16 10:14:11

标签: c# .net xml http webservice-client

我有一个.NET WeBService项目,并从另一个项目引用它。 Visual Studio使用我的Web Service的所有方法生成代理类(SoapHttpClient)。我使用WebService的项目是.NET CF移动应用程序。这意味着Internet访问和WebService并不总是可用。我需要做的是确保从移动设备到Web服务的所有请求最终都能到达它。我希望通过在工作线程中将所有请求排队到WebService来执行此操作,该工作线程以串行方式执行Web请求,直到执行成功为止。问题是生成的代理类具有所有名为的Web方法。没有一种机制可以从我可以存储以供以后使用的方法中“提取”通用的“Web请求对象”。我必须使用它们的名称和参数显式调用Web方法。这编译了我的代码。 我的问题是 - .NET WebServices中是否有一种机制可以将Web请求“提取”为一个对象,以后再将它们提取出来?

此致

多米尼克

1 个答案:

答案 0 :(得分: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);
        }
    }
}

希望这会给你一个想法。