2010-07-06 115 views
1

我需要通过wcf服务共享我的应用程序统计信息。我能够自我托管我的wcf服务,但ServiceHost对象构造函数是默认的,使我无法初始化我的服务的其他成员变量。将控制台应用程序对象共享到自主主机WCF服务

样品:

public interface IService 
{ 
    //some operations here 
} 

public class Service : IService 
{ 
    object myObject; 
    //implementation of IService 
} 

myObject的是我的控制台应用程序对象(列表),我想使我的服务才能够寻找到它。有什么方法可以在我的WCF服务中引用它吗?

+0

任何最终解决方案与完整的源代码示例工作呢? – Kiquenet 2013-06-20 12:02:56

回答

1

您可以自己提供服务的实例creating自定义IInstanceProvider

+0

我会尝试IInstanceProvider。我是否需要在我的app.config文件中添加一些内容?链接上的示例使用实现IContractBehaviorAttribute,IContractBehavior的类,但不显示它是如何实例化的。 我正在托管我的服务,如下所示: ServiceHost dccaService = new ServiceHost(typeof(CreditControl.SOA.SOAP.Service)); dccaService.Open(); – powerbox 2010-07-06 06:43:58

+0

为了注册自定义实例提供程序,需要'IServiceBehavior'。然后你可以有一个自定义的'ServiceHost'。这是另一个演示整个过程的链接:http://initializecomponent.blogspot.com/2008/06/integrating-unity-with-wcf.html – 2010-07-06 07:00:22

+0

我创建了一个实现IServiceBehavior的类,该类实现了IInstanceProvider和一个实现IContractBehaviorAttribute和IContractBehavior的类。 我的服务的创建将和我上面发布的一样。我期待我的课程的实现IServiceBehavior将在SvcConfigEditor.exe扩展名下,当我浏览我的dll文件,但它不是。我做得对吗? – powerbox 2010-07-06 07:42:15

0

你可以在你的服务实现代码中使用此方法来获取手柄上的ServiceHost实例:

ServiceHostBase base = OperationContext.Current.Host; 

现在你有一个链接到您的服务主机 - 任何公开使用和访问可以被读取(最好不要设置,因为可能有很多服务类实例正在运行)。

+0

易于使用但很难进行单元测试。 – 2010-07-06 06:26:45