没有端点监听net.pipe
本文关键字:net pipe 监听 端点 | 更新日期: 2023-09-27 18:02:10
我得到以下错误:
无终点网管道://localhost/ServiceModelSamples/服务,可以接受消息。这通常是由不正确的地址或SOAP操作引起的。详情请参见InnerException(如果存在)。
我从另一个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();
自托管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);
}
}
}
应用程序。配置
<?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>
-
确保
IIS
配置为使用Windows Process Activation Service(WAS)
:- 在"开始"菜单中选择"控制面板"。
- 选择"程序",然后选择"程序和功能",或者在经典视图中,select
Programs and Features
. - 单击
Turn Windows Features on or off
。 - 在"功能摘要"下单击"添加功能"。
- 展开
Microsoft .NET Framework 3.0(or 3.5)
节点,检查Windows Communication Foundation Non-HTTP Activation feature
。
-
Make sure Net。服务正在运行:
- 到达
run
&openServices.msc
- 确保
Net.Pipe Listener Adapter
服务正在运行
- 到达
在你的App.config中,你已经使用了baseAddress
和http
,尝试将其更改为net.pipe
:
<baseAddresses>
<add baseAddress="net.pipe://localhost/ServiceModelSamples/service"/>
</baseAddresses>
参见NetNamedPipeBinding了解更多细节。
:
您需要在endpoint
中添加bindingConfiguration
,如:
<endpoint address=""
binding="netNamedPipeBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator"
bindingConfiguration="Binding1" />
并添加实际的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>
我有同样的错误弹出。我在windows 8.1上运行Visual Studio 2013。我的解决方案是以管理员的身份运行Visual Studio。
我还在windows Server 2012上运行Visual Studio 2013,这与8.1基本相同,重新启动它作为管理员也为我解决了这个问题。
希望有帮助!
我遇到这个问题是因为我使用的是较旧的教程,并试图以编程方式配置。
我缺少的部分是提供元数据端点(谢谢,这篇文章!)。
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"
);