.NET Web Services - управление веб-запросами - PullRequest
0 голосов
/ 16 августа 2010

У меня есть проект .NET WeBService и ссылка на него из другого проекта.Visual Studio генерирует прокси-класс (SoapHttpClient) со всеми методами моего веб-сервиса.Проект, из которого я использую WebService, представляет собой мобильное приложение .NET CF.Это означает, что доступ в Интернет и WebService не всегда доступны.Что мне нужно сделать, так это убедиться, что все запросы от мобильного телефона к веб-службе, наконец, дойдут до него.Я хочу сделать это, ставя в очередь все запросы к WebService в рабочем потоке, который выполняет веб-запросы последовательно, пока выполнение не будет успешным.Проблема заключается в том, что сгенерированный прокси-класс имеет все веб-методы.Не существует механизма, который мог бы «извлечь» общий «объект веб-запроса» из метода, который я могу сохранить для последующего использования.Я должен вызывать веб-методы явно, используя их имена и параметры.Это компилирует мой код.У меня вопрос - есть ли в .NET WebServices механизм для «извлечения» веб-запроса как объекта и его последующего использования?

1 Ответ

1 голос
/ 16 августа 2010

Насколько мне известно, .NET сгенерированный прокси не будет предоставлять объекты веб-запроса, которые вы хотите.Но вы можете создать простой прокси-сервер для хранения информации запроса, а затем использовать прокси-сервер .NET (или класс SoapHttpClientProtocol) для выполнения веб-запроса.Ниже приведен пример кода шаблона:

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

Надеюсь, это даст вам представление.

...