2008-10-09 108 views
3

有沒有方法可以改變asp.net生成.asmx文件生成的WSDL元素的方式?具體來說,它似乎標記所有元素minoccurs =「0」,並有一些元素,我想要minoccurs =「1」(又名必填字段)。更改ASP.NET生成的ASP.NET Web服務的WSDL

其中之一是Web服務的參數(例如,foo(arg1,arg2),其中我希望在WSDL中生成arg2作爲minoccurs =「1」)另一個是類中特定的字段到arg1。我是否必須放棄自動生成WSDL並採取「合同優先」方法?

回答

7

我認爲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

2

使用的XMLElement(ISNULLABLE =真)產生的minOccurs = 1,但它也會在WSDL中生成nillable =「true」,這是不可取的。

1

我知道的唯一方法(升級到WCF的簡稱)是使用[XmlSchemaProvider]屬性。這允許您指定一個方法,該方法將返回將作爲WSDL一部分發出的模式。當你到達這一點時,你可能會發現最好是親手編寫自己的WSDL,這樣你就不必擔心如何強制.NET爲你編寫它。然後,您只需將WSDL放置在網站上的已知位置(可能與服務位於同一站點),然後告訴客戶使用http://url/service.wsdl而不是service.asmx?wsdl。