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