BAM WCF 및 WF 인터셉터의 알려진 문제
이 섹션에서는 Windows Workflow Foundation 또는 Windows Communication Foundation에 대해 BAM 인터셉터를 사용할 때 발생할 수 있는 알려진 문제에 대한 정보를 제공합니다.
IIS에서 호스팅되는 동적으로 생성된 WCF 어셈블리 인터셉트
IIS를 사용하여 포함된 Windows Communication Foundation 애플리케이션(예: 어셈블리 소스를 지정하는 서비스 파일)을 호스팅할 때는 WCF 어셈블리가 동적으로 생성되며 임의의 파일 이름이 지정되어 asp.net 임시 폴더에 저장됩니다. 인터셉터 구성 파일에는 매니페스트 정보가 필요한데 와일드카드 문자 또는 매니페스트를 지정하는 기타 동적 메서드를 인터셉터 구성 파일에서는 사용할 수 없기 때문에, 서비스를 다시 컴파일한 다음 인터셉터 구성 파일을 빌드하거나 포함된 WCF 코드가 들어 있는 모든 asp.net 웹 페이지를 배포한 후에 인터셉터 구성 파일을 다시 배포해야 합니다.
Office 및 SharePoint Server에서 Windows Workflow Foundation용 BAM 인터셉터를 사용할 수 없음
Office 및 Windows SharePoint Server는 WF 런타임을 초기화할 때 애플리케이션 구성 파일의 내용을 읽어오지 않습니다. 따라서 WF용 BAM 인터셉터를 애플리케이션에 대해 구성할 수는 있지만 인터셉터가 이러한 환경 내에서 호스팅되는 경우 워크플로 런타임으로 로드되지 않습니다.
분산 트랜잭션을 시작할 때 클라이언트 서비스가 잠김
서비스 작업이 클라이언트가 시작한 트랜잭션에 참여하지 않는 경우 클라이언트가 트랜잭션 범위 컨텍스트로부터 서비스를 호출하면 교착 상태가 발생할 수 있습니다. 특히 송신 요청 전에 클라이언트로부터 데이터를 수집 중이며 같은 활동에 대해 수신 요청도 서비스로부터 데이터를 수집하는 중인 경우 이러한 현상이 발생합니다.
이러한 상황을 방지하려면 아래에 나와 있는 것처럼 클라이언트의 app.config 파일에서 BAM 동작 확장에 대해 클라이언트 ConnectionString
특성에 "Enlist = false"를 선언하여 클라이언트가 트랜잭션에 참여하지 않도록 지정해야 합니다.
<behavior name="bamClientBehavior">
<bamClientBehaviorExtension ConnectionString="Integrated Security=SSPI;Initial Catalog=BAMPrimaryImport;Data Source=.; Enlist=false" PollingIntervalSec="1500" />
</behavior>
BAM 인터셉터를 사용하는 경우 메시지를 보내기 전에 WCF 채널 열기
BasicHttp 바인딩을 통해 WCF에 대해 BAM 인터셉터를 사용하도록 설정할 때는 프록시에서 proxy.Open()을 호출하여 채널을 명시적으로 열어야 합니다. 채널을 명시적으로 열지 않으면 BAM 인터셉션이 실패하고 예외가 발생할 수 있습니다.