2010-08-13 53 views
2

我有一個ASMX服務。我想收到它的回覆。我的代碼如下:如何從ASMX服務獲取返回值?

public class UserService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public string GetPassword() 
    { 
     return "123"; 
    } 
} 
+1

您的代碼似乎罰款。有什麼問題? – 2010-08-13 12:24:30

回答

3

如果您的意思是「我該如何連接到此Web服務?」你需要創建一個Visual Studio項目(我假設VS2k8這裏),無論是控制檯應用程序,Windows窗體,或幾乎任何其他

  1. 右鍵單擊Solution Explorer中的「參考」,然後選擇「添加服務引用...」
  2. 輸入您已經找到您的服務將在地址欄中的地址
  3. 點擊「GO」
  4. 選擇相關服務的「服務」對話框
  5. 選擇「名稱空間」框的名稱空間
  6. 點擊確定

Visual Studio現在將爲您生成一個服務代理。如果你選擇了你的命名空間,例如「myNameSpace對象」,然後在Visual Studio中,您可以添加在你的代碼:

using (var client = new MyNamespace.UserService()) 
{ 
    var result = client.GetPassword(); 
} 
+0

但我使用Silverlight :) ... client.GetPasswordAsync()...並且它的函數不返回值 – 2010-08-13 13:34:14

+1

嗯,那是因爲你調用了Async版本的方法。因爲異步方法不會(1)直接返回它們的結果,並且(2)阻止了你的執行,所以你需要在'client.GetPasswordCompleted'方法中添加一個事件處理程序,因爲結果將會在'e.Result'中代碼直到完成。 – Rob 2010-08-13 13:53:35

+0

號我沒有找到e.Result propetry :(我拍了一個截圖http://img205.imageshack.us/img205/4241/screenss.png我的IDE的圖片 – 2010-08-13 15:56:49

1

我希望你要ASMX服務連線到你的Silverlight應用程序。如果是這樣的話,你可以看看這個blog

儘管我在我的博客中使用了WCF服務,但將服務連接到Silverlight應用程序是完全相同的。

按照博客中的步驟將ASMX服務添加爲ServiceReference。

嘗試在客戶端的代碼

private void Connect2Service() 
{ 
    ServiceReference.UserServiceClient client = new ServiceReference.UserServiceClient(); 
    client.GetPasswordCompleted += 
      new EventHandler<GetPasswordCompletedEventArgs>(client_GetPasswordCompleted); 
    client.GetPasswordAsync(); 
} 

private void client_GetPasswordCompleted(object sender, GetPasswordCompletedEventArgs e) 
{ 
    // Textblock will show the output. In your case "123" 
    textblock.Text = e.Result; 
} 
+0

非常感謝。它工作... – 2010-08-16 11:31:00

+0

請標記爲答案,以便它也可以幫助他人。謝謝 – 2010-08-16 17:23:39

+0

這可以很好地在UI線程上進行UI更改。但是如果我想使用PCL呢?如何從'e.Result'獲得價值並將其發回'Connect2Service'? – Rohit 2014-10-29 06:28:32