0

我有一个 .NET WeBService 项目和另一个项目对它的引用。Visual Studio 使用我的 Web 服务的所有方法生成一个代理类 (SoapHttpClient)。我使用 WebService 的项目是一个 .NET CF 移动应用程序。这意味着 Internet 访问和 WebService 并不总是可用。我需要做的是确保从移动设备到 Web 服务的所有请求最终都会到达它。我想通过在串行执行 Web 请求的工作线程中对 WebService 的所有请求进行排队,直到执行成功。问题是生成的代理类具有命名的所有 Web 方法。没有一种机制可以从我可以存储供以后使用的方法中“提取”通用“Web 请求对象”。我必须使用它们的名称和参数显式调用 Web 方法。这使我的代码复杂化。我的问题是 - .NET WebServices 中是否有一种机制可以将 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 回答