Подтвердить что ты не робот

Как создать веб-сервис из wsdl

Клиент предоставил мне wsdl для создания веб-службы. Но когда я использовал команду wsdl.exe, он сгенерировал класс .cs. Я использовал этот класс в своем веб-сервисе, и когда я предоставил wsdl клиенту, он не соответствовал их схеме. На самом деле я хочу, чтобы .asmx автоматически генерировался из wsdl, чтобы я мог заполнить веб-метод. Так что это точно соответствует их схеме. Надеюсь, что это имеет смысл.

4b9b3361

Ответ 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