Веб-служба ASMX с параметром Guid

У меня есть веб-служба asmx со следующим методом

    [WebMethod]
    public string LoadRegions(Guid id)
    {
        throw new NotImplementedException();
    }

Когда я пытаюсь вызвать этот метод, я получаю это исключение:

System.InvalidOperationException: LoadRegions Web Service method 
name is not valid.
at System.Web.Services.Protocols.HttpServerProtocol.Initialize()

Если я изменю тип параметра с Guid на, скажем, строку, проблема исчезнет. Предложения? В целях тестирования я вызываю службу с этим URL-адресом из Firefox:

http://localhost:81/services/ContactService.asmx/LoadRegions
?id=6C388126-5787-4B63-AAFE-5BCC4EA4DF83

Какие-либо предложения?


person 3Dave    schedule 05.02.2010    source источник
comment
Вы всегда можете изменить тип параметра на строку и выполнить Guid.Parse.   -  person Klaus Byskov Pedersen    schedule 05.02.2010
comment
@klausbyskov да, но я бы предпочел, чтобы фреймворк обрабатывал десериализацию Guid, чем добавлял ненужный код для проверки типа на сервере.   -  person 3Dave    schedule 05.02.2010


Ответы (2)


Я пытаюсь найти официальную документацию, но оказывается, что вы не можете использовать GUID в качестве типа ввода в WebMethod, потому что это не то, что можно проверить на входе. Но я не могу найти точную документацию по нему. .

Я бы, скорее всего, оставил его как строковый параметр, а первая строка вашего метода сделала бы Guid.Parse, чтобы проверить, что это GUID, если нет, отправьте пользователю исключение. Я видел, как это делается в других реализациях, которым требуется GUID для WebMethod.

person Mitchel Sellers    schedule 05.02.2010
comment
Я думаю, что это тот путь, по которому я собираюсь идти, хотя необходимость выполнять этот дополнительный шаг для того, что, в конечном счете, является очень простым типом данных, раздражает. Если вы найдете ссылку, прямо указывающую, что гиды не поддерживаются, добавьте ее в свой пост. - person 3Dave; 05.02.2010

Вы пробовали это с помощью службы с реальным вызовом SOAP?

Я не думаю, что http GET позволит вам указывать сложные типы.

Я также почти уверен, что 6C388126-5787-4B63-AAFE-5BCC4EA4DF83 представляет собой GUID только для нас, людей, это строка для компьютера - по сути, у вас несоответствие типов, и это не метод, определенный с правильными аргументами (насколько это касается ОС).

person Ruddy    schedule 05.02.2010