Как использовать веб-сервис с файлом WSDL? - PullRequest
4 голосов
/ 31 июля 2009

дан URL-адрес для WSDL, его фрагмент здесь ... не уверен, является ли этот элемент подходящим или нет. Я знаю, как добавить веб-ссылку и импортировать пространство имен в Visual Studio 2005.

Вопросы ... как мне передать мои значения? Как мне кодировать для бинарного 64? У меня есть имя метода (GETP) ... не уверен, как вызвать его как функцию для передачи параметров, или если это даже правильный способ сделать это с этим типом ссылки. Ранее использовали только файлы .asmx.

  <wsdl:message name="GETPResponse">
      <wsdl:part name="GETPReturn" type="xsd:string" /> 
  </wsdl:message>
  <wsdl:message name="GETPRequest">
      <wsdl:part name="BASE64DATA" type="xsd:base64Binary" /> 
  </wsdl:message>
  <wsdl:portType name="Dist">
     <wsdl:operation name="GETP" parameterOrder="BASE64DATA">
         <wsdl:input message="impl:GETPRequest" name="GETPRequest" /> 
         <wsdl:output message="impl:GETPResponse" name="GETPResponse" /> 
     </wsdl:operation>
  </wsdl:portType>

Ответы [ 2 ]

5 голосов
/ 31 июля 2009

Просто используйте «Add Service Refrence» и укажите его на WSDL. Смотрите " Как использовать веб-сервис ".

0 голосов
/ 11 сентября 2015

На этом сайте описано, как создать и использовать класс WSDL, или как ссылаться на веб-службу с помощью веб-ссылки Visual Studio: https://msdn.microsoft.com/en-us/library/ms155134.aspx

Ни один из вариантов не работал для меня. Мне нужно было создать класс WSDL, как на этом сайте, но веб-ссылка не сработала для меня, и ни один не сделал просто добавление этого класса в мою папку App_Code и попытку его создания. Поэтому я решил создать сборку из класса WSDL, а затем сослаться на эту сборку в моем проекте. Это был единственный способ получить любые полезные классы / методы, доступные мне. Вот мои общие шаги, от начала до конца, которые работали для меня.

  1. Убедитесь, что в верхней части файла ASMX.cs веб-службы указан правильный URL-адрес: [WebService(Namespace = "http://localhost:99999/WebService1.asmx")]

    Если оставить это значение по умолчанию "tempuri.org", это вызовет у вас невыносимое горе.

  2. Получите Windows SDK для вашей рабочей станции / сервера и установите.

  3. В командной строке перейдите к WSDL, который для меня на Server 2012 был: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools

  4. Затем используйте это: wsdl /l:CS /protocol:SOAP http://localhost:99999/WebService1.asmx?wsdl

Затем вы можете сделать одну из 2 вещей:

  • Прокси-класс будет сгенерирован в той же папке, в которой вы находились в командной строке. Перейти к нему в проводнике, скопировать его в новый проект библиотеки классов Visual Studio, в корне решение. (Подробнее см. В https://msdn.microsoft.com/en-us/library/cc175801(v=vs.90).aspx и перейдите к разделу «Создание проекта для сборки прокси».) Подпишите сборка (подробности на том же сайте, раздел «Подписание и сборка» Сборка прокси "). (С сериализацией я не заморачивался исключения или структура - только эти 2 раздела, только.)

-ИЛИ- (проще)

  • Просто используйте CSC для сборки вашей сборки:

    • Переместите прокси-класс в C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727.

    • Запустите командную строку и cd в эту папку.

    • Запустите эту команду:

      csc /t:library MyWebServiceProxyClassFile.cs /reference:System.Web.Services.dll /optimize

Очевидно, замените «MyWebServiceProxyClassFile» именем вашего файла класса прокси. Это даст вам файл DLL с тем же именем, что и ваш прокси-класс.

  1. Импортируйте сборку в ваш клиентский проект, перейдя в Add Reference и перейдя к сборке в том прокси-проекте, который вы только что создали в шаге 4. Он должен находиться в папке MyServiceProxy\bin\Debug. (Или перейдите к C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727, если вы оставили его там, с помощью CSC.)
  2. Создание экземпляра с использованием имени класса вашего веб-сервиса: YourClass service = new YourClass(); Вы должны увидеть доступные веб-методы, когда вы используете service. с intellisense.
  3. Скорее всего, вам понадобится добавить следующие параметры:

    service.Url = "http://localhost:99999/WebService1.asmx";
    service.Credentials = CredentialCache.DefaultCredentials;
    

(Добавьте using System.Net; в начало вашего класса, чтобы использовать этот последний.)

Для тех, кто говорит, что это «старый» или «устаревший» способ сделать это, я говорю, что это сработало для меня, и сказал бы, чтобы сказать Microsoft, чтобы заставить его работать, используя веб-ссылку, и нам не пришлось бы делать это это так. Кроме того, это в значительной степени их документированный процесс, в конце концов, с некоторыми из моих собственных выводов. И я заметил кое-что еще - svcutil генерирует совершенно другой, WCF-совместимый прокси-класс, которого нет в WSDL, поэтому будьте осторожны, какую утилиту вы используете. фактически используют - они НЕ созданы равными.

Кроме того, я создал свой собственный пакетный файл для создания прокси-класса из веб-службы, а затем для сборки сборки из него с использованием CSC, как показано выше:

echo off
cls
cls
set /P svc="Input the URL to your web service's Service.asmx file: "
cd \
cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
wsdl /l:CS /protocol:SOAP %svc%?WSDL
set /P name="Type the name of the service's class' name (no .cs on end): "
move %name%.cs C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\%name%.cs
cd \
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
csc /t:library %name%.cs /reference:System.Web.Services.dll /optimize
move %name%.dll C:\%name%.dll
move %name%.cs C:\%name%.cs
echo Your DLL and Proxy Class are waiting for you at
echo.
echo   C:\%name%.dll
echo.
echo. and
echo.
echo.  C:\%name%.cs
echo.
explorer.exe C:\
pause
cls
exit

Это настроено для работы на Server 2012 с установленным Windows SDK. Вы можете запустить его на любой платформе, если вы измените место, в котором wsdl указывает на папку SDK Visual Studio, если вы его установите, например:

cd "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin" 

вместо этой папки инструментов NETFX.

Вы могли бы использовать его, сначала введя URL-адрес веб-службы, напр. http://localhost:99999/WebService1.asmx

Когда класс генерируется, вы даете этой программе имя файла класса, за вычетом .cs. В моем примере оно также должно совпадать с именем класса по умолчанию в верхней части файла WebService1.asmx.cs.

Затем он оставит для вас прокси-класс и файл сборки в корне C:

Для тех, кто хочет преобразовать ASMX в интерфейс WCF, я нашел это: https://msdn.microsoft.com/en-us/library/vstudio/ms751529%28v=VS.100%29.aspx Это выглядело многообещающе, что вы используете svcutil для создания прокси, я предполагаю добавить его в папку ASP.NET App_Code (он не говорит) и добавить ссылку на службу к URL-адресу веб-службы ASMX, но не слишком много подробностей / рекомендаций о том, как назвать контракт и куда поместить этот фрагмент <client> в web.config, хотя я полагаю, что он входит в <system.ServiceModel>.

...