在Client和Server之间的每个WCF调用之间共享常量

时间:2017-12-13 19:08:20

标签: c# wcf .net-4.5 wcf-proxy

在调用WCF服务之前,WCF客户端计算了几个整数常量。我希望这些整数常量可以在WCF服务上使用。请注意,我不希望它们被用作方法参数,因为无论服务中的方法如何,都需要这些常量。每个方法都有相同的参数是多余的。

要明确的是,客户端在进行WCF服务调用之前会继续计算“a”和“b”的值。一旦完成呼叫,整个呼叫'a'和'b'都可以被服务访问。这类似于将它们用作方法的参数。唯一不同的是,WCF服务中的每个方法都需要'a'和'b'。所以,我更喜欢一个更好的解决方案,而不是在WCF调用中为每个方法添加'a'和'b'作为参数。

所以,假设我在WCF服务中有3个方法 - >

int ticketsWanted = input.nextInt();

while(ticketsWanted < 0) {
        ticketsWanted = input.nextInt();
    }

客户端将为每个WCF方法调用计算不同的“a”和“b”值。一种解决方案是将方法保持为这种格式。

void Count1()

void Count2()

void Count3()

但是,如果可能的话,我想要一个更好的解决方案。

对这个长问题感到抱歉。

2 个答案:

答案 0 :(得分:1)

你可以创建一个&#34; Request&#34;将您的服务作为数据合同进行分类,并在此请求中包含ab以及您可能希望从客户端获取的任何其他值。基本请求只会保留ab,但其他请求可能来自它 这样,您只需为每个方法向服务发送一个参数。

答案 1 :(得分:0)

这不是WCF服务的正常模式,但是,您可以创建一个持续时间为客户端的“粘性”服务类。请注意,InstanceContextMode设置为session,这意味着只要客户端没有断开/放弃或没有发生超时,此类实例就会挂起(您需要发送一个周期性脉冲才能保留它)如果你的客户不健谈,请醒着。另外,请注意ConcurrencyMode

[ServiceBehavior(Name = "MyStickyServicee",
    InstanceContextMode = InstanceContextMode.PerSession,
    ConcurrencyMode = ConcurrencyMode.Single)]

public class MyStickyService : IMyStickyService, IDisposable
{
}

以下是有关instancing in wcf的更多信息。