2011-10-20 21 views
1

我找到了我的方式來WCF + WSDL。在gSOAP和axis2的第一個例子中,它很好用。但是我也遇到了一個問題:WCF WSDL只提供複雜的類型/方法

當我查看我的WSDL時,它始終使用複雜類型(請求和響應)進行遠程過程調用。

<xsd:element name="AddResponse"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element minOccurs="0" name="AddResult" type="xsd:double"/> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

所以我必須調用Add方法有兩個參數proxy.Add(request, response)然後提取實際返回的值double result = reponse.Result

我想讓它更直接。例如,double result = proxy.Add(1, 2)。那可能嗎?

在此先感謝。

回答

1

如果您將類指定爲參數,它將始終將其作爲複雜類型創建。

如果您不想要複雜的類型,那麼您將需要單獨傳遞參數。

所以不是

void YourOperation (YourObject request) 

您需要(例如)

void YourOperation (int param1, string param2, ...) 

做,如果響應是一個單一的數據類型值(整型,字符串,等等),它會做同樣的事情,不創建一個複雜的類型。如果你的響應不止一個值,那麼當你創建一個類作爲返回對象時,它將把它作爲一個複雜的類型。

+0

但我只是聲明瞭一個'int Add(int a,int b)'方法並在其上運行gSOAP。所以我沒有使用複雜的類型! – Matthias

1

創建的WSDL是一個XSD(一個XML模式定義),它定義了所有的方法和類型。
如果您閱讀following page,您會看到需要複雜類型才能創建新元素或屬性。
要聯繫您的WCF服務,您可以將其他C#項目中的服務引用添加到您的WCF服務,然後使用普通對象和方法。

1

是的,它可以使用你的服務這種方式,它是默認的方式。只需使用WCF服務應用程序模板將新項目添加到您的解決方案。嵌入在這個模板樣本服務包含這樣的方法:

string GetData(int value) 

在不改變任何建設項目和WSDL會爲你生成。然後在其他項目中,只需從上下文菜單中選擇添加服務引用 - >發現選擇找到的內容,然後單擊確定。代理類將在您的項目中生成,您可以調用它:

var service = new ServiceReference1.Service1Client(); 
var reslut = service.GetData(4);