简体   繁体   English

没有端点在net.pipe上侦听

[英]No endpoint listening at net.pipe

I am getting the following error: 我收到以下错误:

There was no endpoint listening at net.pipe://localhost/ServiceModelSamples/service that could accept the message. 在net.pipe:// localhost / ServiceModelSamples / service上没有可以接受该消息的端点。 This is often caused by an incorrect address or SOAP action. 这通常是由错误的地址或SOAP操作引起的。 See InnerException, if present, for more details. 有关更多详细信息,请参阅InnerException(如果存在)。

I am calling WCF self hosted service inside windows service from another WCF call as follows. 我在另一个WCF调用中调用Windows服务中的WCF自托管服务,如下所示。

                   _host = new ServiceHost(typeof(CalculatorService),
            new Uri[] { new Uri("net.pipe://localhost/PINSenderService") });

        _host.AddServiceEndpoint(typeof(ICalculator),
                new NetNamedPipeBinding(),
                "");

        _host.Open();

        ChannelFactory<ICalculator> factory = new ChannelFactory<ICalculator>(
            new NetNamedPipeBinding(NetNamedPipeSecurityMode.None),
            new EndpointAddress("net.pipe://localhost/PINSenderService"));
        ICalculator proxy = factory.CreateChannel();
        proxy.SendPin(pin);
        ((IClientChannel)proxy).Close();
        factory.Close();

Self-Hosted WCF Service 自托管WCF服务

 namespace PINSender
 {

    // Define a service contract.    

    public interface ICalculator
    {
        [OperationContract]
        void SendPin(string pin);
    }

    // Implement the ICalculator service contract in a service class.
    public class CalculatorService : ICalculator
    {
        // Implement the ICalculator methods.
        public void  SendPin(string pin)
        {
        }
    }

    public class CalculatorWindowsService : ServiceBase
    {
        public ServiceHost serviceHost = null;
        public CalculatorWindowsService()
        {
            // Name the Windows Service
            ServiceName = "PINSenderService";
        }

        public static void Main()
        {
            ServiceBase.Run(new CalculatorWindowsService());
        }

        // Start the Windows service.
        protected override void OnStart(string[] args)
        {
            if (serviceHost != null)
            {
                serviceHost.Close();
            }

            // Create a ServiceHost for the CalculatorService type and 
            // provide the base address.
            serviceHost = new ServiceHost(typeof(CalculatorService));

            // Open the ServiceHostBase to create listeners and start 
            // listening for messages.
            serviceHost.Open();
        }

        protected override void OnStop()
        {
            if (serviceHost != null)
            {
                serviceHost.Close();
                serviceHost = null;
            }
        }
    }

    // Provide the ProjectInstaller class which allows 
    // the service to be installed by the Installutil.exe tool
    [RunInstaller(true)]
    public class ProjectInstaller : Installer
    {
        private ServiceProcessInstaller process;
        private ServiceInstaller service;

        public ProjectInstaller()
        {
            process = new ServiceProcessInstaller();
            process.Account = ServiceAccount.LocalSystem;
            service = new ServiceInstaller();
            service.ServiceName = "PINSenderService";
            Installers.Add(process);
            Installers.Add(service);
        }
     }

}

App.Config App.Config中

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
  <service name="PINSender.CalculatorService"
           behaviorConfiguration="CalculatorServiceBehavior">
    <host>
      <baseAddresses>            
        <add baseAddress="net.pipe://localhost/PINSenderService"/>
      </baseAddresses>
    </host>

    <endpoint address=""
              binding="netNamedPipeBinding"
              contract="PINSender.ICalculator" />        
    <endpoint address="mex"
              binding="mexNamedPipeBinding"
              contract="IMetadataExchange" />                
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <serviceMetadata httpGetEnabled="False"  />
      <serviceDebug includeExceptionDetailInFaults="False"/>
    </behavior>
  </serviceBehaviors>
  </behaviors>
 </system.serviceModel>
</configuration>
  • Make sure IIS is configured to use Windows Process Activation Service(WAS) : 确保IIS配置为使用Windows Process Activation Service(WAS)

    1. From the Start menu, choose Control Panel. 从“开始”菜单中,选择“控制面板”。
    2. Select Programs, then Programs and Features, or in Classic view, select Programs and Features . 选择程序,然后选择程序和功能,或在经典视图中,选择Programs and Features
    3. Click Turn Windows Features on or off . 单击“ Turn Windows Features on or off
    4. Under Features Summary, click Add Features. 在功能摘要下,单击添加功能。
    5. Expand the Microsoft .NET Framework 3.0(or 3.5) node and check the Windows Communication Foundation Non-HTTP Activation feature . 展开Microsoft .NET Framework 3.0(or 3.5)节点并检查Windows Communication Foundation Non-HTTP Activation feature
  • Make sure Net.Pipe Listener Adapter service is running: 确保Net.Pipe侦听器适配器服务正在运行:

    1. Got to run & open Services.msc 必须run并打开Services.msc
    2. Make sure Net.Pipe Listener Adapter service is running. 确保Net.Pipe Listener Adapter服务正在运行。

In your App.config, you have used baseAddress with http , try changing that to net.pipe : 在App.config中,您已将baseAddresshttp baseAddress使用,请尝试将其更改为net.pipe

  <baseAddresses>
    <add baseAddress="net.pipe://localhost/ServiceModelSamples/service"/>
  </baseAddresses>

see NetNamedPipeBinding for more details. 有关详细信息,请参阅NetNamedPipeBinding

Update : 更新

You need to add bindingConfiguration in endpoint like : 您需要在endpoint添加bindingConfiguration ,如:

<endpoint address=""
              binding="netNamedPipeBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" 
              bindingConfiguration="Binding1" /> 

and add actual bindingConfiguration like: 并添加实际的bindingConfiguration如:

    <bindings>
  <!-- 
        Following is the expanded configuration section for a NetNamedPipeBinding.
        Each property is configured with the default value.
     -->
  <netNamedPipeBinding>
    <binding name="Binding1" 
             closeTimeout="00:01:00"
             openTimeout="00:01:00" 
             receiveTimeout="00:10:00" 
             sendTimeout="00:01:00"
             transactionFlow="false" 
             transferMode="Buffered" 
             transactionProtocol="OleTransactions"
             hostNameComparisonMode="StrongWildcard" 
             maxBufferPoolSize="524288"
             maxBufferSize="65536" 
             maxConnections="10" 
             maxReceivedMessageSize="65536">
      <security mode="Transport">
        <transport protectionLevel="EncryptAndSign" />
      </security>
    </binding>
  </netNamedPipeBinding>
</bindings>

I had the same error pop up. 我弹出了同样的错误。 I was running from Visual Studio 2013, on windows 8.1. 我在Windows 8.1上运行Visual Studio 2013。 The solution for me was to run Visual Studio as an Administrator. 我的解决方案是以管理员身份运行Visual Studio。

I also run Visual Studio 2013 on windows Server 2012 which is basically the same as 8.1, restarting it as admin also fixed the problem for me. 我也在Windows Server 2012上运行Visual Studio 2013,它与8.1基本相同,重新启动它,因为管理员也修复了我的问题。

Hope it helps! 希望能帮助到你!

I had this issue because I was using an older tutorial , and trying to configure programatically. 我有这个问题,因为我使用的是较旧的教程 ,并尝试以编程方式进行配置。

The part I was missing was to supply the metadata endpoint ( thank you, this post! ). 我缺少的部分是提供元数据端点( 谢谢,这篇文章! )。

ServiceMetadataBehavior serviceMetadataBehavior = 
    host.Description.Behaviors.Find<ServiceMetadataBehavior>();

if (serviceMetadataBehavior == null)
{
    serviceMetadataBehavior = new ServiceMetadataBehavior();
    host.Description.Behaviors.Add(serviceMetadataBehavior);
}

host.AddServiceEndpoint(
    typeof(IMetadataExchange), 
    MetadataExchangeBindings.CreateMexNamedPipeBinding(), 
    "net.pipe://localhost/PipeReverse/mex"
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM