0

WCFクライアントを作成していて、ChannelFactoryを使用してサービスへのプロキシを作成しています。

    [ServiceContract]
    interface Service {

        [OperationContract]
        void Operation();
    }


var proxy = ChannelFactory<MyServiceInterface>.CreateChannel(
            new BasicHttpBinding(),
            new EndpointAddress("http://localhost:8000/"));

SessionIDを取得するにはどうすればよいですか?プロキシには、基本的なObjectメソッドと、MyServiceInterfaceで定義されたメソッドのみがあります。

前もって感謝します。

4

2 に答える 2

1

これを試して:

WCF サービス ファイル (.svc) に次を追加します。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service1 : IService1
{
    public string SessionId()
    {
        return OperationContext.Current.SessionId;
    }
}

WCF サービス インターフェイスで、次を追加します。

[ServiceContract(SessionMode = SessionMode.Required)]
public interface IService1
{
    [OperationContract]
    string SessionId();
}

クライアントで、次の操作を行います。

    ChannelFactory<IService1> factory = new ChannelFactory<IService1>(
        new WSHttpBinding(), new EndpointAddress("http://localhost:4213/Service1.svc"));
    IService1 proxy = factory.CreateChannel();

    Console.WriteLine(proxy.SessionId());

    ((IClientChannel)proxy).Close();
    factory.Close();

    Console.Read();

これにより、サービス側で作成されたプロキシ セッションを取得できます。((IClientChannel)proxy).Close();とがいつfactory.Close();呼び出されたかを知るだけで、プロキシは新しいセッションを取得します。

于 2012-07-31T22:22:42.180 に答える
0

SessionId() を OperationContract にすることは、私が探していたものではありませんでした。ChannelFactory を使用する代わりに、ClientBase<> を拡張して独自のプロキシを作成すると、InnerChannel.SessionId プロパティにアクセスできるようになります。

于 2012-08-01T19:42:35.850 に答える