Клиент предоставил мне wsdl для создания веб-службы. Но когда я использовал команду wsdl.exe, он сгенерировал класс .cs. Я использовал этот класс в своем веб-сервисе, и когда я предоставил wsdl клиенту, он не соответствовал их схеме. На самом деле я хочу, чтобы .asmx автоматически генерировался из wsdl, чтобы я мог заполнить веб-метод. Так что это точно соответствует их схеме. Надеюсь, что это имеет смысл.
Как создать веб-сервис из wsdl
Ответ 1
К сожалению, нет волшебного пулевого решения для того, что вы ищете. Вот что вы можете сделать:
-
создайте класс интерфейса с помощью этой команды в окне командной строки Visual Studio:
wsdl.exe yourFile.wsdl /l:CS /serverInterface
Используйте VB или CS для вашего языка выбора. Это создаст новый файл.cs
или.vb
. -
Создайте новый проект .NET Web Service. Импортируйте существующий файл в свой проект - файл, созданный на шаге выше.
-
В вашем файле
.asmx.cs
в Code-View измените свой класс как таковой:
public class MyWebService : System.Web.Services.WebService, IMyWsdlInterface
{
[WebMethod]
public string GetSomeString()
{
//you'll have to write your own business logic
return "Hello SOAP World";
}
}
Ответ 2
Как использовать переключатели wsdl /server
или wsdl /serverinterface
?
Насколько я понимаю свойства командной строки wsdl.exe, это то, что вы ищете.
- ADVANCED -
/сервер
Server switch has been deprecated. Please use /serverInterface instead.
Generate an abstract class for an xml web service implementation using
ASP.NET based on the contracts. The default is to generate client proxy
classes.
С другой стороны: почему вы хотите создавать устаревшие технологические решения? Почему бы не создать этот веб-сервис в качестве службы WCF. Это современный и более современный, гораздо более гибкий способ сделать это!
Марк
ОБНОВЛЕНИЕ:
Когда я использую wsdl /server
в файле WSDL, я создаю этот файл:
[WebService(Namespace="http://.......")]
public abstract partial class OneCrmServiceType : System.Web.Services.WebService
{
/// <remarks/>
[WebMethod]
public abstract void OrderCreated(......);
}
В основном это почти тот же код, который генерируется при добавлении файла ASMX в ваше решение (в коде за файлом - "yourservice.asmx.cs" ). Я не думаю, что вы можете приблизиться к созданию файла ASMX из файла WSDL.
Вы всегда можете добавить "yourservice.asmx" вручную - на самом деле он не содержит много:
<%@ WebService Language="C#" CodeBehind="YourService.asmx.cs"
Class="YourServiceNamespace.YourServiceClass" %>
Ответ 3
Вы не можете гарантировать, что автоматически созданный WSDL будет соответствовать WSDL, с которого вы создаете интерфейс службы.
В вашем сценарии вы должны разместить файл WSDL на своем веб-сайте где-нибудь, и потребители будут использовать этот URL. Вы должны отключить протокол Documentation
в файле web.config, чтобы "? Wsdl" не возвращал WSDL. См. <protocols>
Элемент.
Также обратите внимание на первый абзац этой статьи:
Этот раздел посвящен устаревшей технологии. Теперь веб-сервисы XML и клиенты веб-служб XML должны быть созданы с помощью Windows Communication Foundation (WCF).
Ответ 4
Вы можете сгенерировать классы прокси-сервера WS с помощью инструмента WSCF (First Services Contract First) от thinktecture.com. Таким образом, вы можете создавать веб-службы из wsdl. Создание asmx's, может быть, нет, но что легкий бит не так ли? Этот инструмент блестяще интегрируется в VS2005-8 (новая версия для 2010/WCF под названием WSCF-blue). Я использовал его для загрузки и всегда считал, что это действительно хорошо.
Ответ 5
Это может быть очень поздно в ответе. Но может быть полезно для нуждающихся: Как преобразовать WSDL в SVC:
- Предполагая, что у вас есть файл .wsdl в местоположении "E: \" для облегчения доступа.
- Подготовьте команду для каждого файла .wsdl как: E:\YourServiceFileName.wsdl
- Разрешения: Предполагая, что у вас есть права администратора на выполнение разрешений. Открыть каталог: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
- Щелкните правой кнопкой мыши на amd64 = > Безопасность = > Изменить = > Добавить пользователя = > Все или Текущий пользователь = > Разрешить все разрешения = > ОК.
- Подготовьте команды для каждого файла в текстовом редакторе как: wsdl.exe E:\YourServiceFileName.wsdl/l: CS/server.
- Теперь откройте командную строку Visual Studio из: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\VS2013 Командная строка встроенных инструментов x64.
- Выполните команду выше.
-
Перейдите в каталог: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64, где должен быть сгенерирован соответствующий файл .CS.
9. Создайте файл CS в соответствующем месте.
Ответ 6
шаг 1
open -> Visual Studio 2017 Developer Command Prompt
Шаг-2
WSDL.exe /OUT:myFile.cs WSDLURL /Language:CS /serverInterface
- /serverInterface (это для создания интерфейса из файла wsdl)
- WSDL.exe (используется для создания класса из wsdl. Поставляется с .net
- /OUT: (имя выходного файла)
шаг 2
создать новый "Проект веб-службы"
шаг 3
добавить → веб-сервис
Шаг 4
скопируйте весь код из myFile.cs (сгенерированного выше), кроме "используя классы" например:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")]
[System.Web.Services.WebServiceBindingAttribute(Name="calculoterServiceSoap",Namespace="http://tempuri.org/")]
public interface ICalculoterServiceSoap {
/// <remarks/>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/addition", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
string addition(int firtNo, int secNo);
}
Шаг 4
вставьте его в ваш webService.asmx.cs (внутри пространства имен), созданный выше на шаге 2
Шаг 5
наследовать класс интерфейса с вашим классом веб-сервиса например:
public class WebService2 : ICalculoterServiceSoap