有没有办法改变asp.net在.asmx文件生成的WSDL中生成元素的方式?具体来说,它似乎标记所有元素minoccurs =“0”并且有一些元素我想要minoccurs =“1”(又名必填字段)。
其中一个是Web服务的参数(例如foo(arg1,arg2),我希望在WSDL中生成arg2为minoccurs =“1”)另一个是类中对应的特定字段ARG1。我是否必须放弃自动生成WSDL并采取“合同优先”的方法?
答案 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。