2009-12-24 2 views
3

WCF 서비스를 호스팅하는 프로세스에서 WCF 서비스의 클라이언트가 될 수 있습니까? 동일한 프로세스 내에서 별도의 앱 도메인을 만들려고했지만 아직 성공하지 못했습니다. 이 서비스는 Http, Net.TCP 및 Net.Pipe에서 사용할 수있는 것으로 확인되었습니다.동일한 프로세스에서 WCF 서비스 호스팅 및 사용

도움 주셔서 감사합니다.

+1

어떤 특별한 문제가 있습니까? –

+0

왜? 엔드 포인트를 신경 쓰지 않고 직접 기본 메소드를 사용할 수 있어야합니다. – Firestrand

답변

2

당신은 WCF 서비스에 대한 처리중인 클라이언트를 만드는 과정을 단순화 IDesign의의 ServiceModelEx 어셈블리를 사용하여 시도 할 수 있습니다.

어셈블리에는 동적으로 Net.Pipe 끝점과 서비스 프록시를 만드는 InProcFactory 클래스가 포함되어 있습니다.

ServiceModelEx from IDesign.net

1

예. WCF 서비스를 호스트 한 후에는 별도의 스레드에서 호스팅 된 서비스의 메서드를 호출해야합니다.

1

특정 문제가 무엇인지 모르겠지만 같은 프로세스 내에서 WCF 서비스를 사용하면서 문제가 발생했습니다. 내 문제는 내 응용 프로그램이 클라이언트에서 서비스를 호출 할 때 잠시 멈추고 마지막으로 시간 초과 예외를 반환한다는 것입니다. 나는 이것이 서버에서 응답을 기다리는 동안 스레드에서 블로킹 호출과 관련이 있다고 가정합니다 ... 서버가 차단되면 문제가됩니다. 명명 된 파이프를 사용하고 있었지만 다른 옵션을 사용하지 않았습니다.

위의 삼손의 제안은 아마도 효과가 있지만 다른 방식으로 수행했습니다. 스레드에서 호스팅 된 서비스를 호출하는 대신 스레드를 통해 서비스 및 수신기를 만들었습니다. 이것은 잘 작동하는 것 같습니다.

이제 화제가되는 약간을 위해 - Firestrand는 당신이 당신 자신의 응용 프로그램 내에서 이것을하고 싶어하는 이유를 물었습니다. Windows 서비스와 통신 할 필요가있는 별도의 WPF 응용 프로그램 UI를 만들고 있습니다. 그러나 WCF 호출을 포함하여 많은 Windows 서비스 디버깅은 고통 스럽습니다. "테스트"모드에서 UI 응용 프로그램에서 참조 할 수있는 별도의 DLL에 들어가기 때문에 기본적으로 시작 루틴이 호출됩니다 실제 Windows 서비스가 제공 할 것입니다. 이를 통해 프로세스에 연결하거나 여러 프로세스를 실행하지 않고도 UI와 "시뮬레이션 된"서비스를 디버깅 할 수 있습니다. UI와 DLL이 완성되면 기본적으로 DLL에 대한 래퍼 인 실제 Windows 서비스를 만든 다음 적어도 UI에서 테스트 모드를 숨 깁니다. 다른 사람들이이 접근법이 도움이된다는 사실을 발견 한 경우에 대비해 공유 할 것이라고 생각했습니다.

3

ServiceModelEx에서 InProcFactory를 사용하는 경우에도 동일한 문제가있었습니다.

here에 설명 된 것처럼 ServiceBehavior를 이 아닌UseSynchronizationContext으로 설정해야합니다.

[ServiceBehavior(UseSynchronizationContext = false)] 
public class MyService : IMyService {}