1

WCF의 WebServiceHost을 기반으로하는 Webbrowser 컨트롤과 간단한 REST 스타일 서비스가 포함 된 UI로 구성된 응용 프로그램 수준 VSTO 추가 기능을 개발하고 있습니다. 이 서비스는 컨텐츠, 특히 플래시 무비를 임베디드 브라우저에 전달합니다. 이것은 어제까지 매력처럼 작동하는 데 사용됩니다. 아직 알려지지 않은 일부 이유 (일부 .NET 업데이트가 내부 처리가 변경된)로 인해 브라우저가 내장 된 서버에서 플래시 동영상을로드하면 이제 전체 Word 응용 프로그램이 정지됩니다. 웹 서버 코드를 별도의 프로세스로 옮기면 여전히 작동하며 플래시 무비가 이미 브라우저 캐시에있는 경우에도 작동하므로 추가 및 검색 모두에서 플래시 무비를 표시하고 표시하는 조합입니다. 그것이 문제의 원인입니다.WebServiceHost in VSTO addin

나는 약간의 연구를했는데 (은 어쩌면 이었음) 멀티 스레딩과 VSTO 추가 기능이 잘 어울리지 않는다는 것을 알게되었습니다. 그리고 웹 서비스를 실행하는 것은 분명히 어떤 종류의 멀티 스레딩을 의미합니다.

제 질문은 이렇습니다 : 이런 종류의 아키텍처를 안정적으로 실행할 수있는 기회가 있습니까? 그렇다면 무엇을 놓치고 있습니까? 아니면 다른 접근법을 시도해야합니까? 그렇다면 무엇을 권하고 싶습니까? 나는 일반적인 docroot를 보장하고, UI 및 제공 내용 사이에 약간의 논리를 둘 필요가 없기 때문에 옵션을하지 않는 URL을 따라서 디스크에서 직접 내용을로드

참고 :사용 "// 파일을" .

답변

1

VSTO 추가 기능은 STA, 그래서 당신은 WCF와 STA (see related SO post)를 연구하는 것이 좋습니다.

항상 VSTO 추가 기능 호스트의 STA 문제를 방지하려면 host the WCF service as a windows service 수 있습니다.

+0

+1 매우 흥미로운 링크입니다. 아아, 문제를 해결하지 못합니다. STA 아파트 상태의 invoke-thread 자체는 여전히 반환됩니다 (결과로 FileStream 포함). Freeze가 .NET 자체의 어딘가에서 발생하는 것처럼 보입니다. 여기서는 FileStream이 HTTP 응답을 채우는 데 사용됩니다. - Windows 서비스를 사용하는 것은 addin의 일부 사용자의 IT 작업에별로 좋아하지 않습니다. 그래서 저는 현재 WCF 서비스가 addin에 의해 시작되고 제어되는 별도의 프로세스에서 실행되도록하려고합니다. – Matthias

+0

Matthias -'Process.Start'를 사용하고 계시거나 다른'AppDomain'을로드하여 프로세스를 격리 시키셨습니까? – SliverNinja

+0

나는 Process.Start를 사용하고 있으며 지금까지 충분히 잘 운영되도록하고있다. 그것은 매우 우아한 해결책은 아니지만. 그리고 아직도 숨겨진 문제가있을 수 있다고 나는 확신하지 못합니다. 솔직하게 말해서, 나는 별도의 AppDomain을 만들지는 생각하지 못했습니다. 이게 효과가 있다고 생각하니? – Matthias

관련 문제