2012-04-04 5 views
1

호스트 응용 프로그램을 만들어야하는 WFC (4.0) 서비스 DLL이 있습니다. dll은 매우 간단하고 다음과 같은 인터페이스를 가지고 있습니다 :WCF 서비스 (dll) 호스트 응용 프로그램

[ServiceContract(CallbackContract=typeof(IChatServiceCallback))] 
    public interface IService { 
     [OperationContract] 
     Guid Subscribe(); 
    } 

    public interface IServiceCallback { 
     void NotifyClient(strign message); 
    } 

서비스를 만들 때 문제가 발생합니다. 클라이언트에서 호스트로 채널을 만들 때 다음 예외가 발생합니다. "ChannelFactory에 제공된 InstanceContext에 CallbackContractType 'Client.MyServiceReference.IServiceCallback'을 구현하지 않는 UserObjecct가 있습니다."

ServiceReference 개체 브라우저에서 ClientObject에 IServiceCallback 인터페이스가 없다는 것을 발견했습니다. 여기 내 correspoding 호스트 코드 :

ServiceHost host = new ServiceHost(typeof(ChatService)); 

    try 
    { 
     host.BeginOpen(new AsyncCallback(OnOpen), host); 
     mre.WaitOne(); 
     if (host.State == CommunicationState.Opened) 
     { 
      Console.WriteLine("Server is running!\nServer listens on the following endpoints:"); 
      foreach (var endp in host.Description.Endpoints) 
      { 
       Console.WriteLine("\t{0}", endp.Address); 
      } 

      Console.WriteLine("Press <Enter> to stop the server..."); 
      Console.ReadLine(); 
      host.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error: {0}", ex.Message); 
    } 

가 어떻게 클라이언트 측에서 구현 콜백 인터페이스를 포함하는 서비스 DLL에 대한 호스트 응용 프로그램을 만들 수 있습니까?

클라이언트 측 : 시도 { clientID = client.Subscribe(); < - 예외가 발생합니다. } catch (Exception ex) { MessageBox.Show (ex.Message, "Error", MessageBoxButton.OK); }

답변

1

클라이언트에서 직접 서비스 계약 어셈블리를 사용할 수 있습니까? 그렇다면 DuplexChannelFactory를 사용하여 클라이언트 측 서비스 참조 코드를 완전히 피할 수 있습니다.

그리고 예를 here

나는이 답변으로 문제가 해결되지 않습니다 알고 있지만 그것은 당신이 그것을 해결하는 데 도움이 될 수 있습니다.

+0

고맙지 만 호스트가 서비스 기능을 구현합니다. 나는 구현을 포함하는 준비 서비스를 가지고있다. 나는 인터페이스와 클래스를 dll에 가지고 있으므로 호스트 응용 프로그램에서 다시 작성하고 싶지 않습니다. – Wrath

+0

그럼 왜 서비스 호스트에서 ChannelFactory를 사용하고 있습니까? ChannelFactory는 클라이언트가 서비스에 연결하는 것입니다. –

+0

어떤 ChannelFactory입니까? 어디에? 제 생각에는 당신이 제 문제에 대해 자세히 알지 못하는 것 같아요. 나는 .dll 라이브러리에있는 완전한 서비스를 가지고있다. 서비스를 호스팅하고 클라이언트 연결을받는 호스트 응용 프로그램을 만들어야합니다. 방금 ​​ChannelFactory를 어디서 얻었는지 모르겠습니다. 나는 네가 준 링크가 내 질문에 적합하지 않다고 말했다. 나는 준비된 서비스를 가지고 있으며 콜백 인터페이스와 함께 그것을 단지 호스트해야한다. 최근에 준 링크에서 호스트에서 서비스가 구현됩니다. 내 서비스가 내가 원하는 DLL에 구현되어 있기 때문에 사용할 수 없습니다. – Wrath

관련 문제