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

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

问题描述:

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

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

我认为XmlElement(IsNullable = true)属性将做的工作:

using System.Xml.Serialization; 

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

EDIT [VB版]

Imports System.Xml.Serialization 

Public Function MyService(<XmlElement(IsNullable:=True)> ByVal arg As String) As String 
    Return ("1") 
End Function 
+0

你知道你在VB.NET中怎么做?我似乎无法找到相应的表达式...... – user7243 2008-10-10 16:05:17

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

我知道的唯一方法(升级到WCF的简称)是使用[XmlSchemaProvider]属性。这允许您指定一个方法,该方法将返回将作为WSDL一部分发出的模式。当你到达这一点时,你可能会发现最好是亲手编写自己的WSDL,这样你就不必担心如何强制.NET为你编写它。然后,您只需将WSDL放置在网站上的已知位置(可能与服务位于同一站点),然后告诉客户使用http://url/service.wsdl而不是service.asmx?wsdl。