[英]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)
:
Programs and Features
. Programs and Features
。 Turn Windows Features on or off
. Turn Windows Features on or off
。 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侦听器适配器服务正在运行:
run
& open Services.msc
run
并打开Services.msc
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中,您已将
baseAddress
与http
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.