本節包含一組問題和解答,旨在幫助您處理流程編排的執行時問題。
為什麼在傳送至父代剛啟動的子協調流程時發生間歇性訂用帳戶錯誤?
訂用帳戶錯誤「找不到訂用帳戶」是競爭條件的結果。 當進程的結果取決於進程發生的特定順序時,就會發生競爭條件。 在此情況下,當子協調流程尚未及時啟動以接收父代所傳送的訊息時,就會發生此情況。
為避免這個問題,子協調流程可以在啟動後並準備接收訊息時,將訊息傳回父系。 這樣一來,父層級協調流程在傳送消息之前就會知道已有接收者。
為什麼我在將動態傳送埠附加至邏輯埠時收到錯誤?
動態埠不是設計來繼承指派給它之埠的所有屬性和特性。 動態埠只會取得位址;它不會繼承與邏輯埠相關聯的其他資訊。
例如,如果您將動態傳送埠附加至具有傳遞通知 = 傳輸的邏輯埠,運行時間將不會傳遞傳遞通知。 如果埠實際上已以靜態方式設定,XLANGs 運行時間只會接聽傳遞通知。
備註
在 XLANG 中,埠只會在靜態設定時運作。
當我嘗試在部署具有自定義元件的協調流程之後執行應用程式時,為什麼會收到「找不到檔案或元件名稱或其其中一個相依性」錯誤?
此錯誤通常表示 BizTalk 協調流程引擎找不到自訂元件。 您必須在裝載應用程式之計算機的全域程式集緩存中,安裝 BizTalk 應用程式中包含的所有元件。
透過協調流程將檔提交至 Web 服務時,會發生「AssemblyName 內容屬性無效」錯誤
問題
透過協調流程將檔提交至 Web 服務會導致「AssemblyName 內容屬性無效」錯誤。
原因
BizTalk 應用程式原本是使用「傳訊」方法所設計,而不需要介入協調流程。 這種類型的解決方案會使用傳送埠篩選來連結接收埠和傳送埠,以便在收到時將檔傳遞至傳送埠。 之後,解決方案已修改為包含系結至傳送埠的協調流程。
解決辦法
拿掉傳送埠上的篩選。 如果您將篩選套用至系結至協調流程的傳送埠,訊息通常會略過協調流程並造成內容屬性錯誤。
在協調流程中處理多部分MIME訊息時,會發生“WrongBodyPartException”
問題
將多部分MIME訊息接收至協調流程會導致 WrongBodyPartException 例外狀況。
原因
如果部分的順序不正確或訊息不符合您指定的元件位置,就可能發生此錯誤。 例如,如果您指定第三個部分是本文部分,但訊息會以第三個位置的標頭部分抵達。
解決辦法
確認正文部件索引設定正確,然後確保所有透過適配器抵達的訊息都與該設定一致。 您可以藉由停止協調流程來檢查在協調流程內失敗的 MIME 訊息內容(但保留其登記):這會強制發佈訊息,讓您可以使用管理控制台檢查訊息,並確認元件的順序。
找不到多部分MIME訊息元件
問題
嘗試擷取索引值大於 0 的 MIME 訊息部件時,BizTalk Server 執行階段會擲出類似「無法找到索引 = <value> 的多部分訊息」的錯誤。
原因
此錯誤最常見的原因是:
MIME 訊息的元件少於預期。
MIME 訊息無法完全剖析。
解決辦法
您可以藉由確保程式代碼只擷取來自訊息來源所預期範圍內的訊息元件,來解決此問題。 如果遇到解析問題,您應該確認原始 MIME 訊息在結構上完好且正確建構。 如果您預期會有偶爾的解析問題,請確定您的流程編排具備適當的例外狀況處理程式。
使用動態傳送埠傳送時,您收到「FILE 傳送配接器無法開啟檔案以供寫入」錯誤
問題
您在使用動態傳送埠傳送時,在 BizTalk Server 事件記錄檔中收到「FILE 傳送配接器無法開啟檔案 <檔名> 以供寫入」錯誤。
本文描述了當在協調流程運算式中定義了 BTS.OutBoundTransportLocation 屬性並指定檔案傳輸時,就會在運行時發生錯誤,例如以下表達式將導致此錯誤:
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file:///c:/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
-或-
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file://mymachine/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
原因
發生此問題的原因是在運行時間,協調流程引擎會從指定的URL移除「file://」 文字。 因此,使用上述範例,“file:///c:/test/out” 會評估為 \c:\test\out,並將 “file://mymachine/test/out” 評估為 mymachine\test\out。
解決辦法
當在表達式中指定 BTS.OutBoundTransportLocation 屬性的 URL 時,根據需要新增或移除「/」字元。 使用上述範例,BTS 的 OutBoundTransportLocation 屬性應定義為 "file://c:/test/out",它會解析為 c:\test\out,或 "file:////mymachine/test/out",解析為 \\mymachine\test\out。