В прошлый раз я упомянул, что Receive Adapter должен уметь[1] выставить "WindowsUser" property, если его попросят. Осталось разобраться в том, как его "попросить". Во-первых, понятно, что не каждый адаптер умеет провести authetication. Что может значить authentication для, например, File Adapter, когда файл, в котором находится message, попал в receive folder простым xcopy? С другой стороны, адаптер, который умеет проводить authentication (HTTP Adapter, например) и "просить" об этом не надо - пусть себе всегда его и проводит, кому это мешает? Т.е. единственная возможность "попросить" адаптер произвести authentication это потребовать, чтобы, соответствуюший в pipeline, ResolveParty component взаимодействовал с некоторыми другими properties, кот. устанавливаются адаптером. А именно, для этого существует context prperty - AuthenticationRequiredOnReceivePort. ResolveParty component проверяет установлена ли она в false, и если false, неудача в попытке party resolution приводит только к тому, что BTS.WindowsUser и BTS.SourcePartyID остаются пустыми. Сам же передаётся дальше (например в orchestration). Если же AuthenticationRequiredOnReceivePort стоит на true, то неудача в party resolution, приводит к такой ошибке :
"There was a failure executing the receive pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLReceive" Source: "Microsoft.BizTalk.Pipeline.Components" Receive Location: "D:okeyPrintDocIn*.xml" Reason: There was an authentication failure. "The party corresponding to the inbound message cannot be identified".
[1] Из адаптера, как и из pipeline, добраться до этого property довольно просто. Из - сложнее (say, possible) (запись от 4.4.05)