gpt4 book ai didi

c# - WCF 定义具有不同 ServiceContract 类型的多个 ServiceContract

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:39 25 4
gpt4 key购买 nike

我正在尝试编写两种完全不同类型的服务契约(Contract),这是一个应该支持多个客户端的 (IService)。

[ServiceContract(CallbackContract = typeof(IClientCallBack), SessionMode = SessionMode.Required)]
public interface IService
{
[OperationContract]
void GetSquaredAsync();
}

public interface IClientCallBack
{
[OperationContract(IsOneWay = true)]
void Result(int i);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
class Service : IService
{
void GetSquaredAsync(double x)
{
callback = OperationContext.Current.GetCallbackChannel<IClientCallBack>();
callback.Result(x * x);
}

这是另一个应该只允许 1 个客户端的:

[ServiceContract(SessionMode = SessionMode.Required)]
public interface ISuperUser
{
[OperationContract]
string WhoIsSpecial(string name);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class SuperUser : ISuperUser
{
public string WhoIsSpecial(string name)
{
return String.Format("{0} is special ^_^", name);
}
}

这只是一个示例,因为我的实际 ServiceContracts 与实现太大而无法在此处发布,但想法是相同的。我想要一个 ServiceContract 检查服务,只有几个函数调用可用,而另一个 ServiceContract 使用回调并授予对功能的访问权限,由于同步问题,我希望在任何给定时间只有 1 个客户端可以访问。我可以做到让一个服务主机可以同时支持这两个 ServiceContracts 吗?

最佳答案

好吧,我仍然无法为我的每个服务设置不同的 ConcurrencyModes,但我发现您可以将多个服务契约(Contract)组合成一个,就像这个例子中的一样

class Service : IService, ISuperUser
{
void GetSquaredAsync(double x)
{
callback = OperationContext.Current.GetCallbackChannel<IClientCallBack>();
callback.Result(x * x);
}

public string WhoIsSpecial(string name)
{
return String.Format("{0} is special ^_^", name);
}
}

然后我为每个接口(interface)启动一个具有不同端点的服务主机。

ServiceHost host = new ServiceHost(typeof(Service), httpUrl);

host.AddServiceEndpoint(typeof(IService), new NetTcpBinding(), IServiceUrl);
host.AddServiceEndpoint(typeof(ISuperUser), new NetTcpBinding(), ISuperUserUrl);

host.Open();

然后,我可以从客户端独立访问任何一个服务契约(Contract),具体取决于我想使用哪个服务契约(Contract),而不会暴露另一个服务契约(Contract)的功能。这也允许我拥有一组使用回调的函数和另一组不使用的函数。希望这对其他人有帮助。

关于c# - WCF 定义具有不同 ServiceContract 类型的多个 ServiceContract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18521916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com