为什么我无法访问托管在 windows 服务中的 wcf?
why I can't access wcf hosted in windows service?
我在 windows 服务中托管了一个 WCF 服务。
当我尝试访问该服务时,出现以下错误消息。
无法连接,因为目标机器主动拒绝 127.0.0.1:9002
内部异常
http://localhost:9002/MainService/Service 上没有端点侦听可以接受消息。这通常是由不正确的地址或 SOAP 操作引起的。有关详细信息,请参阅 InnerException(如果存在)。
但端点已在 WCF 的应用程序配置中定义如下。
<system.serviceModel>
<services>
<service name="MainService.CalculatorService">
<endpoint address="CalculatorService" binding="basicHttpBinding" contract="MainService.ICalculator">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:9002/MainService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
客户端的网络配置
<client>
<endpoint address="http://localhost:9002/MainService/CalculatorService"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_INoiseCalculator"
contract="Service.ICalculator" name="BasicHttpBinding_INoiseCalculator" />
</client>
在 Controller 中,我正在按照以下方式访问服务
MainService.CalculatorClient proxy = new MainService.CalculatorClient();
proxy.getDetails();
我在防火墙里也开了端口
我不知道出了什么问题,因为当服务在 WccSvcHost 中自行托管时它工作正常但在部署后它不起作用。
服务运行状态似乎有问题。为了验证这一点,我们可以先谈谈客户端。
<client>
<endpoint address="http://localhost:9002/MainService/CalculatorService"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_INoiseCalculator"
contract="Service.ICalculator" name="BasicHttpBinding_INoiseCalculator" />
</client>
合同是 Service.ICalculator,而您用来实例化客户端代理的名称空间是 MainService
MainService.CalculatorClient proxy = new MainService.CalculatorClient();
proxy.getDetails();
客户端服务端点是通过添加服务引用自动生成的吗?为什么名称空间不一致?
我建议您通过在客户端添加服务引用来重新生成客户端端点,这样我们就可以检查服务是否运行良好。
关于通过添加服务引用来调用服务。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/accessing-services-using-a-wcf-client
如果问题仍然存在,请随时告诉我。
我在 windows 服务中托管了一个 WCF 服务。
当我尝试访问该服务时,出现以下错误消息。
无法连接,因为目标机器主动拒绝 127.0.0.1:9002
内部异常
http://localhost:9002/MainService/Service 上没有端点侦听可以接受消息。这通常是由不正确的地址或 SOAP 操作引起的。有关详细信息,请参阅 InnerException(如果存在)。
但端点已在 WCF 的应用程序配置中定义如下。
<system.serviceModel>
<services>
<service name="MainService.CalculatorService">
<endpoint address="CalculatorService" binding="basicHttpBinding" contract="MainService.ICalculator">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:9002/MainService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
客户端的网络配置
<client>
<endpoint address="http://localhost:9002/MainService/CalculatorService"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_INoiseCalculator"
contract="Service.ICalculator" name="BasicHttpBinding_INoiseCalculator" />
</client>
在 Controller 中,我正在按照以下方式访问服务
MainService.CalculatorClient proxy = new MainService.CalculatorClient();
proxy.getDetails();
我在防火墙里也开了端口
我不知道出了什么问题,因为当服务在 WccSvcHost 中自行托管时它工作正常但在部署后它不起作用。
服务运行状态似乎有问题。为了验证这一点,我们可以先谈谈客户端。
<client>
<endpoint address="http://localhost:9002/MainService/CalculatorService"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_INoiseCalculator"
contract="Service.ICalculator" name="BasicHttpBinding_INoiseCalculator" />
</client>
合同是 Service.ICalculator,而您用来实例化客户端代理的名称空间是 MainService
MainService.CalculatorClient proxy = new MainService.CalculatorClient();
proxy.getDetails();
客户端服务端点是通过添加服务引用自动生成的吗?为什么名称空间不一致?
我建议您通过在客户端添加服务引用来重新生成客户端端点,这样我们就可以检查服务是否运行良好。
关于通过添加服务引用来调用服务。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/accessing-services-using-a-wcf-client
如果问题仍然存在,请随时告诉我。