2012-02-14 49 views
1

我已經通過將WorkflowServiceHost包裝在WCF服務中創建了多個服務;使用WorkflowHostingEndpoint。這樣做,我能夠定義我的服務合同,並創建代理類來連接到這些服務。我如何手動創建WF4(xamlX)服務的客戶端代理

我現在正在創建一個服務,在該服務中我想使用WF4消息傳遞活動並再次自行承載該服務。我也真的想要手動創建我的代理類,而不使用VS2010或ServiceUtil中的ServiceReference ...

我見過一些使用服務客戶端中的發送活動的引用,但我希望能夠使用一個更像「WCF-like」的代理直接針對服務合約創建,就像我對其他服務所做的那樣。我怎樣才能做到這一點? xamlX(或帶有消息傳遞活動的xaml)中是否存在可以手動生成代理的界面合同?

注意:我不想使用WF_WCF_Samples中所述的發送活動。

更新: 我試圖在發佈此問題之前創建一個與工作流接收活動相同的接口;但我不斷收到以下錯誤:

The message with Action 'http://tempuri.org/ISvrClientService/Create' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).

謝謝!

+1

Ron Jacobs對這個問題和解決方案有很好的解釋。檢查http://blogs.msdn.com/b/rjacobs/archive/2010/07/30/making-a-workflowservice-work-like-a-wcf-service.aspx – Koolb 2012-08-09 05:12:52

回答

1

沒有必要使用發送活動。當您承載一個工作流程服務時,您將託管一個SOAP端點,唯一的區別是實現,但這是一個私人細節。您可以像使用任何其他WCF服務一樣使用ChannelFactory創建代理對象。

var factory = new ChannelFactory<IYourService>(); 
var proxy = factory.CreateChannel(); 

IYourService接口是一些你必須手工製作的接口。服務器上沒有一個,它是在一個工作流中完成的,所以你必須編碼相同的合同。

+0

我已經包含上述更新.. 。基本上,當我創建一個單獨的接口並且無法訪問工作流的接收活動ServiceContractName屬性中的接口時,我始終得到關於綁定不匹配的錯誤。 – maevvamgr 2012-02-14 20:17:40

+0

您是否嘗試創建測試控制檯應用程序並執行添加服務引用?我知道這不是你想使用的,但仔細看看生成的代碼,以便發現差異。 – Maurice 2012-02-14 20:22:38

+0

謝謝Maurice。我能夠驗證問題出在服務上而不是客戶端。我決定使用Xamlservices來捕獲xamlx服務,然後調用WorkflowServiceHost。 – maevvamgr 2012-02-17 16:36:52

1

我已經使用通道工廠和手動創建的接口成功完成了這項工作。訣竅在於匹配回覆/發送/輸出參數名稱,而不僅僅是輸入簽名。

如果您的工作流中具有相關性的書籤,這一點尤其重要。

相關問題