2010-11-12 110 views
1

我有其暴露的web服務業務流程,它檢查該消息的源接收的執行基於一些分支邏輯和調用的一組「服務」的業務流程中的一個(它駐留在不同的應用程序中)。這些服務編排會對我的消息執行一些更新,然後在完成時將其發送迴路由編排。路由應用程序然後發送適當的Web服務響應。即端到端流程都是同步的。同步請求響應

我的意圖是在我的'路由'編排上有一個直接綁定的發送/接收端口,並在'服務'編排上有一個鏈接的接收/發送端口來實現阻塞,但是我在做這項工作時遇到了麻煩。

我已經使用相關性和過濾表達式嘗試,但在服務編排試圖發回它的響應,我不斷看到了「多用戶錯誤」。

我保證不會有其他的業務流程/端口通過我的架構(創建一個全新的角度,以確保)。

撕裂了我的頭髮在這一點,它看起來似乎應該是相對簡單的實現。我傾向於讓服務編排公開一個Web服務並調用它,但是對於一直存在於同一臺機器上的東西來說,似乎還有很長的路要走。

回答

1

通過biztalk確保消息被視爲「不同」的一種常見方式是,這種類型的問題不會發生,就是使用僅在上下文中設置爲不同值的上下文屬性,然後使用相關性和過濾器表達式,以確保消息一次只匹配來自特定位置的消息的特定實例。

這樣一來,即使消息類型相同,訂閱不會真的具有相同的謂詞。

+0

這基本上是我們一直在做的事情,但有在服務編排並沒有對響應不斷變化的過濾器表達式字段的值的錯誤。這意味着除了「調用」協調之外,服務編排本身也是一個消耗其響應的候選人。創建多用戶衝突。 – TygerKrash 2010-11-12 15:08:17

+0

Tomas技術確實對我們有用 - 我們通常使用BTS.receivePortName =「」來識別從Messagebox中獲取的消息。當你說'改變'(原始)消息時,你是否使用相同的模式創建了新消息(例如通過映射),還是正在修改現有消息,在這種情況下,原始上下文屬性將被結轉。 – StuartLC 2010-11-15 11:22:53

+0

爲了澄清,tomasr的方法是正確的,這就是爲什麼我標記它是正確的,問題是我們沒有適當地改變上下文屬性。 – TygerKrash 2010-11-17 09:32:13