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 回答