1

ホストアプリケーションを作成する必要があるWFC(4.0)サービスdllがあります。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インターフェイスが含まれていないことがわかりました。ここに私の対応するホストコードがあります:

    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のホストアプリケーションを作成するにはどうすればよいですか?

ClientSide:{clientID = client.Subscribe();を試してください。<-例外をスローします。} catch(Exception ex){MessageBox.Show(ex.Message、 "Error"、MessageBoxButton.OK); }

4

1 に答える 1

1

クライアントで直接サービス契約アセンブリを使用できますか?その場合は、DuplexChannelFactoryを使用して、クライアント側のサービス参照コードを完全に回避できます。

そしてここでの例

私はこれがあなたの質問に答えないことを知っていますが、それはあなたがそれを回避するのを助けるかもしれません。

于 2012-04-04T08:17:26.473 に答える