2012-02-06 70 views
3

我目前使用Mono for Android開發移動應用程序。我一直試圖通過添加一個Web引用來使用WCF Web服務,但似乎無法通過這種方式進行調用。我現在正在考慮硬着頭皮重寫Java代碼,而我並不擅長使用C#。適用於Android或Java和WCF的Mono

我有2個問題:

  1. 如何使用消費單爲Android一個WCF web服務。
  2. 如果我用java我怎麼會叫,看起來像下面的一個方法:

    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "/MyMethod", 
          RequestFormat = WebMessageFormat.Json, 
          ResponseFormat = WebMessageFormat.Json)] 
    void MyMethod(CustomObjectFromDataContract c_Object); 
    

當我打這個電話,我得到一個消息,說未處理的異常System.Net。引發WebException:。當我進入代碼時,我看到錯誤發生在您撥打電話時

[System.Web.Services.Protocols.SoapDocumentMethodAttribute ("http://tempuri.org/IMyService/MyMethod", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
    public void MyMethod([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] CustomObjectFromDataContract c_Object) { 
    this.Invoke("MyMethod", new object[] { 
        c_Object}); 
    } 

invoke是拋出異常的那個。

+1

「我似乎無法按照這種方式打電話」 - 您可以詳細說明這一部分嗎? – millimoose 2012-02-07 00:20:00

+0

請包括異常消息和堆棧跟蹤 - 這將幫助我們幫助您... – 2012-02-07 08:28:12

回答

2

我已經解決了這個問題。下面是使這項工作的步驟: 1.該服務必須是一個RESTful服務 2.而不是引用Localhost(我在生成的代碼中)使用主機的IP地址。我認爲這是因爲Android運行在Dalvik虛擬機中,我懷疑它有一個與我的Dev計算機使用的本地主機不同的本地主機。 我做到了,我的服務現在可以工作。

0

如果添加Web引用,則應該生成一些包括客戶端的引用類。 然後,您可以創建生成的客戶端實例,並在客戶端上調用MyMethod

因此,假設您使用的是Visual Studio,只需右鍵單擊您的MonoDroid項目>添加Web引用並輸入您的WCF服務的URL。

要調用它,你可以做到以下幾點: 我添加了一個參考的服務命名空間Example.WebReference

那麼我會叫它以下列方式:

Example.WebReference.ServiceElement client = new Example.WebReference.ServiceElement(); 
var output = client.MyMethod(parameter); 

希望這幫助。