powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / web services и namespaces
15 сообщений из 15, страница 1 из 1
web services и namespaces
    #35327518
dimabest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изучаю С#, мой первый строго типизированный язык программирования. Поэтому прошу строго не судить.

Суть в следующем: пишу windows-приложение для работы со сторонним сайтом. Сайт имеет свой API, реализованный в виде двух веб-сервисов. Оба веб-сервиса с программной стороны абсолютно идентичны: одинаковые методы, классы (разница - в географии возвращаемых данных); создание запросов и обработка полученных данных на клиенте также абсолютно одинакова. Однако из-за разных URL-ов получаю в программе два неймспейса: One и Two .... С# требует указать из какого неймспейса я вызываю методы. Приходится писать две версии кода.

Как побороть дублирование?
...
Рейтинг: 0 / 0
web services и namespaces
    #35327769
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У прокси веб-сервиса есть свойство - Url. Вот его и меняйте. Менять можно перед каждым вызовом (я имею в виду - пересоздавать объект не нужно).
...
Рейтинг: 0 / 0
web services и namespaces
    #35327857
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитать про интерфейсы.
...
Рейтинг: 0 / 0
web services и namespaces
    #35327886
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучПочитать про интерфейсы.
Антон, интерфейсы тут совершенно не при чем. В веб-сервисах и так все предусмотрено.
...
Рейтинг: 0 / 0
web services и namespaces
    #35328040
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vagner НахлобучПочитать про интерфейсы.
Антон, интерфейсы тут совершенно не при чем. В веб-сервисах и так все предусмотрено.
Ааа, дада, точно. Почему-то подумал про два веб-сервиса с примерно одинаковыми сигнатурами методов.
...
Рейтинг: 0 / 0
web services и namespaces
    #35328855
dimabest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vagnerУ прокси веб-сервиса есть свойство - Url. Вот его и меняйте. Менять можно перед каждым вызовом (я имею в виду - пересоздавать объект не нужно).

Не решает проблемы.

Так выглядит типичный вызов метода:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
One.SiteService siteService = new One.SiteService();

One.FirstMethodRequestType req = new One.FirstMethodRequestType();

req.a = "параметр 1";
req.b = "параметр 2";

One.FirstMethodResponseType resp = new One.FirstMethodResponseType();

resp = siteService.FirstMethod(req);

в resp получаем целое дерево обьектов.

классы FirstMethodRequestType, FirstMethodResponseType и много десятков других определены на стороне веб-сервиса. Поэтому C# требует указывать перед ними неймспейс One или Two . Приходится писать две версии кода...

Код: plaintext
siteService.Uri = "другой URL";
ничего не меняет
...
Рейтинг: 0 / 0
web services и namespaces
    #35328976
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не Uri а Url (URL). Все решает. В процессе разработки я настраиваюсь на тестовый веб-сервис, пишу код, отлаживаюсь. Когда все готово - меняю URL веб-сервиса в конфиге и все работет. Ну, если быть точным, моя прграмма позволяет пользователю самому задавать сайт, с которым необходимо работать. И если на выбранном сайте есть нужный мне веб-сервис - то все работает.
...
Рейтинг: 0 / 0
web services и namespaces
    #35329199
dimabest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vagnerНе Uri а Url (URL). Все решает. В процессе разработки я настраиваюсь на тестовый веб-сервис, пишу код, отлаживаюсь. Когда все готово - меняю URL веб-сервиса в конфиге и все работет.

с Uri просто опечатка.

изменяю Url перед вызовом метода:

Код: plaintext
1.
siteService.Url = "https://two.site.com/siteServise.wsdl";
resp = siteService.FirstMethod(req);

При выполнении программы вылетает Exeption:

"System.Web.Services.Protocols.SoapHeaderExeption: Internal Error
as
System.Web.Services.Protocols.SoapHttpClientProtocol.ReadPesponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at
System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at
MyProgram.One.SiteService.FirstMethod(FirstMethodRequestType request) in C:\Documents and Settings\dima\Мои документы\Visual Studio 2008\Projects\MyProgram\MyProgram\Web References\One\Reference.cs:line 251
at
MyProgram.main.button_Click(Object sender, EventArgs e) in C:\Documents and Settings\dima\Мои документы\Visual Studio 2008\Projects\MyProgram\MyProgram\main.cs:line 138"

При вызове метода из "родного" веб-сервиса без изменения Url - все работает.
...
Рейтинг: 0 / 0
web services и namespaces
    #35329239
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimabest...
изменяю Url перед вызовом метода:

Код: plaintext
1.
siteService.Url = "https://two.site.com/siteServise.wsdl";
resp = siteService.FirstMethod(req);
...
В Url надо заносить адрес ".../siteServise.asmx", с не ".../siteServise.wsdl".
З.Ы. еще желательно проверить, чтобы у обоих веб-служб были одинаковые target-namespace в описании SOAP-Envelope...
...
Рейтинг: 0 / 0
web services и namespaces
    #35329250
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu... В Url надо заносить адрес ".../siteServise.asmx", с не ".../siteServise.wsdl"...
Пардон, "с не" читать как "а не".
...
Рейтинг: 0 / 0
web services и namespaces
    #35329263
dimabest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qu-qu qu-qu... В Url надо заносить адрес ".../siteServise.asmx", с не ".../siteServise.wsdl"...
Пардон, "с не" читать как "а не".

Никакого .asmx нету. Адрес веб-службы заканчивается на .wsdl
...
Рейтинг: 0 / 0
web services и namespaces
    #35329276
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий (я не ошибся?), поймите, я не просто так пишу. Я говорю Вам как должно быть и как у меня работает.
А теперь давайте попробуем разобраться. У Вас точно два совершенно одинаковых сервиса? То есть, на самом деле, один и тот же сервис установленный на двух сайтах? Мне кажется, что нет. К сожалению, Internal error говорит мало. Посмотрите на исключение внимательнее, может быть, там есть вложенное исключение с более подробной иноформацией? Но что-то мне говорит, что сервисы не одинаковы.
...
Рейтинг: 0 / 0
web services и namespaces
    #35329282
dimabest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А все, всем спасибо. В адресе веб-службы нужно просто убрать ".wsdl" и будет работать.
...
Рейтинг: 0 / 0
web services и namespaces
    #35329292
dimabest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я раньше писал на PHP, где достаточно указать адрес wsdl-файла. Сейчас просмотрел документацию к веб-сервису - увидел раздел "The Connection End-point URLs for the API Services", где указаны адреса на которые на самом деле посылаются запросы, все то же, но без ".wsdl" в конце.

Сорри за мою нерасторопность.
...
Рейтинг: 0 / 0
web services и namespaces
    #35329293
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не успел. Сразу не обратил внимание, в этом все и дело.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / web services и namespaces
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]