На этом сайте описано, как создать и использовать класс WSDL, или как ссылаться на веб-службу с помощью веб-ссылки Visual Studio: https://msdn.microsoft.com/en-us/library/ms155134.aspx
Ни один из вариантов не работал для меня. Мне нужно было создать класс WSDL, как на этом сайте, но веб-ссылка не сработала для меня, и ни один не сделал просто добавление этого класса в мою папку App_Code и попытку его создания. Поэтому я решил создать сборку из класса WSDL, а затем сослаться на эту сборку в моем проекте. Это был единственный способ получить любые полезные классы / методы, доступные мне. Вот мои общие шаги, от начала до конца, которые работали для меня.
Убедитесь, что в верхней части файла ASMX.cs веб-службы указан правильный URL-адрес: [WebService(Namespace = "http://localhost:99999/WebService1.asmx")]
Если оставить это значение по умолчанию "tempuri.org", это вызовет у вас невыносимое горе.
Получите Windows SDK для вашей рабочей станции / сервера и установите.
В командной строке перейдите к WSDL, который для меня на Server 2012 был: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
Затем используйте это: 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 раздела, только.)
-ИЛИ- (проще)
Очевидно, замените «MyWebServiceProxyClassFile» именем вашего файла класса прокси. Это даст вам файл DLL с тем же именем, что и ваш прокси-класс.
- Импортируйте сборку в ваш клиентский проект, перейдя в Add Reference и перейдя к сборке в том прокси-проекте, который вы только что создали в шаге 4. Он должен находиться в папке
MyServiceProxy\bin\Debug
. (Или перейдите к C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727, если вы оставили его там, с помощью CSC.)
- Создание экземпляра с использованием имени класса вашего веб-сервиса:
YourClass service = new YourClass();
Вы должны увидеть доступные веб-методы, когда вы используете service.
с intellisense.
Скорее всего, вам понадобится добавить следующие параметры:
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>
.