2011-02-04 94 views
1

我很難找到一個資源或在線教程,明確引導您設置一個WF4工作流活動,可以調用外部Web服務。我遇到的所有視頻和在線示例都只是演示瞭如何使用作爲Visual Studio解決方案一部分的Web服務,但是我的情況需要在非Microsoft服務器上調用Web服務。WF4 - 如何使用外部Web服務?

我有一個服務引用添加到我的VS2010工作流控制檯項目中的有問題的Web服務,它指向外部Web服務的WSDL。到目前爲止,這麼好(我認爲)。我有一個非常基本的工作流程序,使用SendAndReceiveReply工作流程控制與外部服務器進行通信,並且我相信我的發送部分配置正確。然而,ReceiveReplyForSend給我帶來了麻煩,而且我不確定我是否有其內容選項設置正確的方式。我叫調用FileCheck的操作,這在目前用於測試目的始終返回1這樣的值:

<SOAP-ENV:Envelope> 
    <SOAP-ENV:Body> 
     <FileCheckResponse> 
      <FileCheckResult>1</FileCheckResult> 
     </FileCheckResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

如果我嘗試運行這一點,但是,我得到的錯誤「形成嚴重SOAP消息「。對於它的價值,我的ReceiveReplyForSend具有一個名爲FileCheckResult的單個參數,但我不知道這是否是獲得上述值的正確方法。

我可以在任一活動中放置一個斷點,但我不知道該如何看看SOAP調用的外觀。有人可以給我一些工作流程的發送/回覆調試提示,或者指導我如何在WF4中使用外部Web服務的一個很好的分步教程方向?

2011年2月2日更新:感謝Maurice的建議,我現在看到了什麼是失敗。我的工作流中的Web服務調用失敗,因爲Visual Studio在我的工作流發送調用中生成對錯誤名稱空間的引用。這裏是XML的單個位,這是錯誤的SOAP消息 - 我會離開過SOAP信封的休息簡潔:

<FileCheck xmlns="http://tempuri.org/"> 

這是WCF測試客戶端產生的東西,它得到一個成功的消息回報:

<FileCheck xmlns="http://someserver.org/test/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 

這可能是一個真正的新手問題,但有沒有說我忽視了調整的xmlns值設置的地方?我嘗試在我的項目中搜索「tempuri」,但無法找到它,所以我敢打賭,我忽略了某個地方的默認設置。

2011年2月8日更新:莫里斯的最新技巧做到了!我需要將適當的名稱空間添加到ServiceContractName屬性中,以便我的發送工作流活動。

回答

2

添加對外部Web服務的引用並不比VS2010解決方案的一部分更難。只有在這種情況下,您需要提供VS2010可以找到Web服務WSDL的URL。由於通信機制是標準的WSDL和SOAP,所以在調用其他服務時不應該存在問題。

如果你想調試信息使用最好的工具是Fiddler。它可以讓你在線上看到消息,甚至可以立即建立請求。如果您有一個可以使用相關服務的現有客戶端,則可以監控其消息並將其與您發送的消息進行比較。如果該服務不使用複雜和自定義數據類型,則WCF測試客戶端是一種檢查服務是否響應標準.NET客戶端應用程序的好方法。

SOAP namepsace是ServiceContractName的一部分。使用以下語法

{} http://someserver.org/test/的FileService

+0

謝謝,莫里斯!這有很大的幫助。我能夠在沒有任何問題的情況下向外部服務添加服務引用,但是同時使用Fiddler和WCF Test Client,我現在可以看到我的Web服務調用失敗,因爲我的Visual Studio工作流程沒有生成對適當的命名空間。有關更多詳細信息,請參閱上述更新 – Derek 2011-02-07 20:12:39