在c#中使用现有服务类内的命名管道接口

时间:2014-12-28 14:09:52

标签: c# wcf service interface named-pipes

我的项目包含服务和客户端应用。 我想使用WCF(命名管道)在它们之间交换数据。

我已添加:

namespace MyService
{
    [ServiceContract]
    public interface IPipeComm
    {
        [OperationContract]
        string PipeCommProc(string value);
    }

    //----------

    public class PipeComm : IPipeComm
    {
        public string PipeCommProc(string value)
        {
            return ("blah");
        }
    }

    //----------

    public partial class MyService : ServiceBase
    {
        ServiceHost PipeHost = new ServiceHost(typeof(PipeComm), new Uri[] { new Uri("net.pipe://localhost") });
        ...

一切正常。 但问题是在PipeCommProc里面我想使用我服务的所有数据和方法。 但由于PipeComm是一个不同的类,我无法访问它们。 有没有办法重构这段代码才能实现呢?

1 个答案:

答案 0 :(得分:0)

ServiceHost每次都可以使用真实对象而不是类型进行构造。如果要访问服务类,最简单的方法可能是让服务类实现服务接口,并将现有实例用作WCF服务实例:

namespace MyService
{
    [ServiceContract]
    public interface IPipeComm
    {
        [OperationContract]
        string PipeCommProc(string value);
    }

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]     
    public partial class MyService : ServiceBase, IPipeComm
    {
        public string PipeCommProc(string value)
        {
            return ("blah");
        }

        private readonly ServiceHost PipeHost;

        public MyService()
        {
            PipeHost = new ServiceHost(this, new Uri[] { new Uri("net.pipe://localhost") });
        }
    }