繁体   English   中英

WCF交换服务接口

[英]WCF swap service interfaces

我是WCF的新手,仍在尝试中。

我有两个这样的ServiceContract:

[ServiceContract]
public interface IFirst
{
    [OperationContract(IsOneWay = true)]
    void First();
}

[ServiceContract]
public interface ISecond
{
    [OperationContract(IsOneWay = true)]
    void Second();
}

在实现这些接口的服务器端Client类上:

public class Client : IFirst, ISecond
{
    static int count = 0;
    int id;

    public Client()
    {
        count++;
        id = count;
        Console.WriteLine("{0} client created.", id);
    }

    public void First()
    {
        Console.WriteLine("First from: " + id.ToString());
    }

    public void Second()
    {
        Console.WriteLine("Second: " + id.ToString());
    }
}

和主持人:

ServiceHost host = new ServiceHost(typeof(Client), new Uri("net.tcp://localhost:8000"));
NetTcpBinding binding = new NetTcpBinding();
host.AddServiceEndpoint(typeof(IFirst), binding, "");
host.AddServiceEndpoint(typeof(ISecond), binding, "");
host.Open();

在客户端:

ChannelFactory<IFirst> firstFactory = new ChannelFactory<IFirst>(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8000"));
IFirst iFirst = firstFactory.CreateChannel();
iFirst.First();

ChannelFactory<ISecond> secondFactory = new ChannelFactory<ISecond>(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8000"));
ISecond iSecond = secondFactory.CreateChannel();
iSecond.First();

这很好。 它先调用First方法,然后再调用Second方法,但每次调用都会创建Client类的新实例。 很明显,因为当客户端创建频道时,服务会创建客户端对象的新实例。 我希望实现的是在Client的相同实例下调用Second after First。 可能吗 我知道我可以将这两种方法合而为一,但这不是我想要的。

根据我的理解,您只想在创建一个客户端的同时调用这两种方法。 在WCF中,您可以通过设置服务行为属性的InstanceContextMode属性来控制实例化。 有三个可能的值-PerCall -PerSession -Single

您可以使用PerSession,因为它可以使对象在客户端的下一次调用中保持活动状态。 会话结束时释放对象

您可以装饰您的类[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]

希望这可以帮助。

起初,您将您的服务实现称为“客户”:P使我有些困惑

但是无论如何,默认情况下,WCF使用InstanceContextMode.PerCall,这意味着它将为进入Service的每个请求实例化一个新的Service实现实例。

如果要在同一服务实例中处理后续服务调用,则必须使用PerSession或Single InstanceContextModes。

http://msdn.microsoft.com/zh-cn/library/ms731193.aspx很好地总结了WCF中的会话,实例和并发性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM