2010-05-12 28 views
3

我想知道wcf中MessageParameterAttribute的用法。如何在wcf中使用MessageParameterAttribute

在我的功能:

[OperationContract] 
public float GetAirfare(
[MessageParameter(Name=」fromCity」)] string originCity, 
[MessageParameter(Name=」toCity」)] string destinationCity); 

我在不執行,甚至在使用服務中使用fromCity或toCity任何地方。那麼給它一個名字有什麼意義呢?

回答

5

該屬性用於控制序列化。當您想要在描述傳入消息的結果XSD模式中使用關鍵字或類型名稱時,它可能特別有用。同樣,您可以在響應消息中控制返回值的XML元素名稱。它也可以是標準化XML元素命名約定的有用屬性,與CLR命名約定分開。例如,您可能更喜歡使用駱駝大小寫來表示參數名稱,使用Pascal大小寫來表示XML。

如果我們使用您提供的代碼段爲例,該請求將是這樣的:

<s:Body> 
    <GetAirFare xmlns="yournamespacehere"> 
     <fromCity>Chicago</fromCity> 
     <toCity>Las Vegas</toCity> 
    </GetAirFare> 
</s:Body> 
+0

謝謝。但是,你什麼時候可以直接指定XSD?你能舉個例子嗎? – Archie 2010-05-12 07:51:20

+0

假設您使用的是Visual Studio IDE,則會自動爲您生成XSD。如果您或其他客戶端向WCF服務添加服務引用,您會注意到自動生成的Reference.cs類將如下所示: public float GetAirfare(string fromCity,string toCity){ return base.Channel。 GetAirfare(fromCity,toCity); 如果有人使用非.NET環境來使用服務,並且沒有工具來自動生成像我們這樣的服務代理,那麼他們可能需要手動創建代理類,並且需要XSD和WSDL才能執行它。 – 2010-05-12 19:16:18