为ASP.NET Web服务更改ASP.NET生成的WSDL

时间:2008-10-09 19:00:26

标签: asp.net .net xml web-services wsdl

有没有办法改变asp.net在.asmx文件生成的WSDL中生成元素的方式?具体来说,它似乎标记所有元素minoccurs =“0”并且有一些元素我想要minoccurs =“1”(又名必填字段)。

其中一个是Web服务的参数(例如foo(arg1,arg2),我希望在WSDL中生成arg2为minoccurs =“1”)另一个是类中对应的特定字段ARG1。我是否必须放弃自动生成WSDL并采取“合同优先”的方法?

3 个答案:

答案 0 :(得分:7)

我认为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

答案 1 :(得分:2)

使用XMLElement(IsNullable = true)生成minOccurs = 1,但它也在WSDL中生成nillable =“true”,这是不可取的。

答案 2 :(得分:1)

我所知道的唯一方法(升级到WCF)是使用[XmlSchemaProvider]属性。这允许您指示一个方法,该方法将返回将作为WSDL的一部分发出的模式。

当你达到这一点时,你可能会发现手动编写自己的WSDL会更好,所以你不必担心如何强迫.NET为你编写它。然后,您只需将WSDL放在网站上的已知位置(可能是与服务相同的站点),然后告诉客户使用http://url/service.wsdl而不是service.asmx?wsdl。