2013-07-14 123 views
3

我的問題是在調用認證(具有用戶名和密碼)在ASP.NET MVC的Web服務(ASMX)呼叫驗證Web服務在asp.net MVC

我做了以下內容:

  1. 我通過添加服務引用 到該溶液中加入web服務到項目
  2. 試圖通過使用下面的命令語法

    使用工具 創建代理類服務的3210

    wsdl /username:******** /password:************* /domain:********** web service url.asmx?wsdl

,但它給了我下面的錯誤:

時出錯下載web service url://???.asmx?wsdl。請求失敗,HTTP狀態爲401: Unauthorized

我可以通過提供用戶名和密碼在瀏覽器中查看服務。

當我搜索使用svcutil.exe來創建代理類時,我發現它不能用於認證的Web服務。

我想問是否有另一種方法來創建代理類,或者如果我們可以在沒有代理類的asp.net mvc應用程序中調用驗證過的Web服務。

+0

你在哪裏讀到SvcUtil工具無法處理認證服務? –

+0

非常感謝約翰先生回覆我,當我回到以下鏈接http://msdn.microsoft.com/en-us/library/aa347733.aspx時,我沒有找到和與用戶名/傳遞參數,當看到一些相關的問題,如下面的鏈接http://stackoverflow.com/questions/2693394/passing-username-and-password-to-svcutil-exe,我發現我無法傳遞用戶名/密碼在svcutil命令.....再次感謝 – RProgrammer

+0

只需使用您的瀏覽器下載WSDL,XSD和任何其他相關文件。然後將「添加服務參考」指向磁盤上的文件。 –

回答

4

我得到了一個具有相同行爲的項目,一個Web服務(asmx)在VPN後面,他們使用用戶名/密碼來訪問它,但在VPN內部沒有問題。

這將是很難直接從Visual Studio(也許缺乏這樣的情況下支持)生成代理類但訣竅是很容易的,只要你可以看到在瀏覽器中模式(在WSDL部分)。

做這個

  1. 打開瀏覽器中?wsdl鏈接,進入Source Code模式和整個代碼複製到本地計算機中的文件,let'a承擔c:\temp,並呼籲service.wsdl
  2. 複製svcutil.exec:\temp(它在英寸。NET框架文件夾,just search for it
  3. 打開c:\temp移終端 + 右鍵點擊裏面的文件夾,並選擇在這裏打開命令窗口)
  4. 運行以下命令:svcutil service.wsdl /out:proxy.cs /config:proxy.config

這將生成2個文件,proxy.csproxy.config

  • proxy.cs是您的Web服務的包裝,你只需要添加到您的項目
  • proxy.config有你需要附加到web.config文件<system.serviceModel>

現在,所有你需要做的就是按照生成的包裝和寫類似:

// Web Service initialization and authentication 
client = new MyNamespace.ServiceSoapClient(); 
client.ClientCredentials.UserName.UserName = cUser; 
client.ClientCredentials.UserName.Password = cPass; 

// do something 
client.InsertCompetitor(model); 

// close connection 
if (client != null && client.State == System.ServiceModel.CommunicationState.Opened) 
    client.Close(); 
+1

非常感謝Balexandre先生的回覆,我確定您的程序對我來說很有用,但當我運行svcutil命令時,您提到它給了我以下錯誤 無法將文件C:\ temp \ service.wsdl作爲程序集加載。查看FusionLogs以獲取更多信息。 無法加載文件或程序集'file:/// C:\ temp \ service.wsdl'或其某個依賴項。預計該模塊將包含程序集清單。 ..我不知道爲什麼發生這個錯誤,我搜索了這個錯誤,並嘗試了所有可能給出錯誤的可能性,但它失敗了......再次感謝 – RProgrammer

+1

您需要複製原始代碼,您可以不復制從瀏覽器窗口看到的代碼,您需要打開「查看源代碼」,並且需要檢查文件開頭是否有空格字符並將其刪除,因爲它必須是有效的wdsl文件。 – balexandre

+0

它工作它的工作,真的非常感謝,只有我刪除第一行是<?xml version =「1.0」encoding =「utf-8」?>,並且svcutil創建了這兩個文件,我現在將繼續你的過程 – RProgrammer