Biztalk Mapper 및 [Threadstatic] 속성
-
11-09-2019 - |
문제
나는 최근에 Biztalk Mapper의 멀티 스레드 특성과 외부 어셈블리를 처리하는 방법에 문제가 생겼습니다.
MSDN 의이 인용문에서 알 수 있듯이 :
중요한 스크립팅 functoid에 사용하기 위해 외부 어셈블리로 작성된 모든 코드는 스레드 안전해야합니다. 이는 맵의 여러 인스턴스가 응력 조건에서 실행 시간 에이 .NET 인스턴스를 사용할 수 있으므로 필요합니다.
맵퍼는 외부 어셈블리 인스턴스를 재사용합니다.
유틸리티 어셈블리에서 우리 팀은 다음과 같은 코드를 사용했습니다.
public class MapUtil
{
private string _storeReference;
public void SetStoreReference(string ref)
{
_storeReference = ref;
}
public string GetStoreReference()
{
return _storeReference;
}
}
이로 인해 한 파일의 StoreReerences가 다른 파일에 매핑되었습니다.
나는 개인 필드를 [ThreadStatic]
[ThreadStatic]
private static string _storeReference;
내 질문은 - Biztalk Mapper에서 이것에 대한 문제를 아는 사람이 있습니까? 사용하는 문제가 있다는 것을 알고 있습니다 [ThreadStatic]
ASP.NET for Destmble에서 스레드가 재사용 되었기 때문에 Biztalk Mapper가 스레드를 다루는 방식에 대한 문서를 찾을 수 없습니다.
해결책 2
나는 아직도 'Biztalk Mapper 내의 스레딩 동작이 XYZ라는 선을 따라 결정적인 진술을 찾지 못했습니다. 그래서 당신은 당신이 당신에게 당신을주의해야합니다. Biztalk 제품 팀 외부.
제품 팀과 직접 연락을 취하는 저의 동료 한 동료는 연장 된 크리스마스 휴가 (럭키 도그)에 있습니다. 대량 제작 서버.
글쎄 - 그것은 사실이 아닙니다. 나는 도우미 클래스의 한 속성에서 정적 키워드를 놓칠 수 있었고 그 속성에 대해 우리는 여전히 스레딩 문제를 보았습니다. 나는 그것을 증거로 받아 들일 것이다 ThreadStatic
지금은 올바른 방법입니다.
다른 팁
나는 ThreadStatic을 사용하여 변수를 설정 한 다음 사용자 정의 수신 파이프 라인 인 다음 Biztalk 맵 내에서 값에 액세스 할 수 있습니다 (도우미 클래스를 통해). 지금까지 문제가 발생하지 않았습니다. ~ 50 개의 호출로 테스트되었습니다.