【问题标题】:why I can't access wcf hosted in windows service?为什么我无法访问托管在 Windows 服务中的 wcf?
【发布时间】:2020-01-02 13:31:27
【问题描述】:

我有一个托管在 Windows 服务中的 WCF 服务。

当我尝试访问该服务时,我收到以下错误消息。

无法建立连接,因为目标机器主动拒绝了它 127.0.0.1:9002

内部异常

http://localhost:9002/MainService/Service 上没有可以接受消息的端点监听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。

但是端点已经在 WCF 的 App config 中定义如下。

<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>

客户端的web配置

<client>
    <endpoint address="http://localhost:9002/MainService/CalculatorService"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_INoiseCalculator"
    contract="Service.ICalculator" name="BasicHttpBinding_INoiseCalculator" />
</client>

在控制器中,我按照以下方式访问服务

MainService.CalculatorClient proxy = new MainService.CalculatorClient();
proxy.getDetails();

我也在防火墙中打开了端口。

我不知道出了什么问题,因为当服务在 WccSvcHost 中自行托管时,它可以正常工作,但在部署后它就不起作用了。

【问题讨论】:

    标签: wcf windows-services


    【解决方案1】:

    服务运行状态好像有问题。为了验证这一点,我们可以先谈谈客户端端点。

    <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
    如果问题仍然存在,请随时告诉我。

    【讨论】:

    • 谢谢!端点是自动生成的。出于安全原因,我已将问题中的内容重命名。如前所述,我通过尝试生成 wsdl 来解决问题。问题是基址。我还必须在启动传递绑定名称时使用其中一个重载(当您有多个端点时需要使用绑定名称,在我的情况下这并不奇怪,因为我只有一个端点。)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多