Изменить сгенерированный ASP.NET WSDL для веб-службы ASP.NET - PullRequest
3 голосов
/ 09 октября 2008

Есть ли способ изменить способ, которым asp.net генерирует элементы в WSDL, сгенерированном из файла .asmx? В частности, кажется, что помечены все элементы minoccurs = "0", и есть некоторые элементы, которые я хочу, чтобы minoccurs = "1" (или обязательные поля).

Одним из них является аргумент веб-службы (например, foo (arg1, arg2), где я хочу, чтобы arg2 генерировался в WSDL как minoccurs = "1"), а другое - это конкретное поле в классе, которое соответствует arg1. Должен ли я отказаться от автоматической генерации WSDL и использовать подход «сначала контракт»?

Ответы [ 3 ]

7 голосов
/ 10 октября 2008

Я думаю, что атрибут XmlElement(IsNullable = true) сделает работу:

using System.Xml.Serialization;

[WebMethod]
public string MyService([XmlElement(IsNullable = true)] string arg)
{
  return "1";
}

РЕДАКТИРОВАТЬ [VB версия]

Imports System.Xml.Serialization

Public Function MyService(<XmlElement(IsNullable:=True)> ByVal arg As String) As String
  Return ("1")
End Function
2 голосов
/ 08 апреля 2009

Использование XMLElement (IsNullable = true) генерирует minOccurs = 1, но также генерирует в WSDL nillable = "true", что нежелательно.

1 голос
/ 08 апреля 2009

Единственный известный мне способ (кроме обновления до WCF) - использовать атрибут [XmlSchemaProvider]. Это позволяет вам указать метод, который будет возвращать схему, которая будет отправлена ​​как часть WSDL.

К тому времени, когда вы дойдете до этого момента, вам может оказаться проще просто написать свой собственный WSDL, чтобы вам не пришлось беспокоиться о том, как заставить .NET написать его для вас. Затем вы просто разместите WSDL в известном месте на веб-сайте (возможно, на том же сайте, что и служба), а затем попросите своих клиентов использовать http://url/service.wsdl вместо service.asmx? Wsdl.

...