gpt4 book ai didi

c# - 将对象传递给多个服务

转载 作者:行者123 更新时间:2023-11-30 22:43:51 25 4
gpt4 key购买 nike

我需要从单个 Windows 服务同时运行多个 WCF 服务。每个 WCF 服务基本上是相同的,但有一个特定于该实例的对象。因此使用以下服务类:

public class MyService : IMyContract
{
public MyType MyObject { get; set; }

public MyService(MyType myObject)
{
this.MyObject = myObject;
}
// more here...
}

我希望我能做这样的事情:

MyType o1 = new MyType();
MyService s1 = new MyService(o1);
ServiceHost host1 = new ServiceHost(s1, anEndpointAddress);
MyType o2 = new MyType();
MyService s2 = new MyService(s2);
ServiceHost host2 = new ServiceHost(s2, anEndpointAddress);

问题是,如果您使用将对象作为第一个参数的 ServiceHost 构造函数,该对象需要是一个单例实例,但我需要多个实例。

另一方面,如果我使用将类型作为第一个参数的构造函数 (ServiceHost host = new ServiceHost(typeof(MyService), endpointAddress);),我不知道如何将 MyObject 设置为合适的值。

有没有办法解决这个问题?

谢谢,问候,Miel。

最佳答案

我可以想到两种方法 - 方法 2 将是首选方法。

  1. 创建多个简单地继承自您的服务类的类。例如,

    public class MyService1 : MyService { 
    ... // put a constructor that accepts your object
    }
    public class MyService2 : MyService { ... }

    ...

现在托管为

MyType o1 = new MyType();
MyService s1 = new MyService1(o1);
ServiceHost host1 = new ServiceHost(s1, anEndpointAddress);
MyType o2 = new MyType();
MyService s2 = new MyService2(s2);
ServiceHost host2 = new ServiceHost(s2, anEndpointAddress);

如果你不想要单例,那么你需要修改这些类,例如

 public class MyService1 : MyService
{
public MyService1() : base(new MyType()) { }
}

然后使用另一个服务宿主构造函数

ServiceHost host1 = new ServiceHost(typeof(MyService1), anEndpointAddress);

<强>2。我更喜欢这种方法。 服务实现不会有包含 MyObject 的实例变量。编写自定义 ServiceHost 类,例如

public class MyServiceHost : ServiceHost
{
public MyType MyObject { get; private set; }

public MyServiceHost(Type serviceType, Uri[] baseAddresses, MyType myObject)
:base(serviceType, baseAddresses)
{
this.MyObject = myObject;
}
}

现在,使用

在多个端点地址上托管您的服务
MyType o1 = new MyType();
ServiceHost host1 = new MyServiceHost(typeof(MyService, anEndpointAddress, o1);

在服务方法中,使用 OperationContext.Current.Host 获取服务主机,您可以从 hostm 获取您的对象。

关于c# - 将对象传递给多个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3726037/

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