仅在通过 Windows 服务使用 WCF 时“无端点侦听”

Posted

技术标签:

【中文标题】仅在通过 Windows 服务使用 WCF 时“无端点侦听”【英文标题】:"No Endpoint listening" only when consuming WCF via windows service 【发布时间】:2016-02-16 15:43:12 【问题描述】:

我已经在 IIS(远程主机:godaddy)中部署了 WCF Web 服务,并尝试通过 Windows 服务使用。但是当我尝试通过 Windows 服务消费时出现以下错误。

“异常:在http://mydomainname.com/vfolder1/vfolder2/HelloService.svc/HelloService 处没有侦听端点”可以接受该消息。这通常是由不正确的地址或 SOAP 操作引起的。有关详细信息,请参阅 InnerException(如果存在)。

但是当我通过 Windows 窗体使用相同的服务时,它可以正常工作。

以下是我的 WCF Web 服务配置 (web.config)

  <system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="mexBehaviour">
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service name="HelloService.HelloService" behaviorConfiguration="mexBehaviour">
    <endpoint address="HelloService" binding="basicHttpBinding" contract="HelloService.IHelloService"></endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://mydomainname.com/vfolder1/vfolder2/"/>
      </baseAddresses>
    </host>
  </service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

以下是我的 WCF 客户端配置 (app.config)

  <system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IHelloService" />
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://mydomainname.com/vfolder1/vfolder2/HelloService.svc/HelloService"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHelloService"
            contract="HelloService.IHelloService" name="BasicHttpBinding_IHelloService" />
    </client>
</system.serviceModel>

以下是 Windows 窗体中的代码

       private void button1_Click(object sender, EventArgs e)
    
        HelloService.HelloServiceClient client = new HelloService.HelloServiceClient();
        label1.Text = client.GetMessage(textBox1.Text);

    

下面是 Windows 服务中的代码

       public static void write_data()
    
        try
        
            HelloService.HelloServiceClient clNt = new HelloService.HelloServiceClient();
            for (int i = 0; i < 10; i++)
            
                Write_Log(clNt.GetMessage(i.ToString()));

            
            clNt.Close();

        
        catch (Exception ex)
        
            Write_Log("Exception: " + ex.Message.ToString());
        

    

当我们最初在本地网络 (IIS) 中开发和托管时,我们从未遇到任何问题。这是我们在 WCF 中的第一个项目,涉及远程主机。试图查看所有类似的帖子,但都在谈论完全不工作。不存在与我们的场景类似的东西。

感谢您的大力帮助。

【问题讨论】:

windows服务在什么用户下运行?我注意到内置用户在网络方面的功能存在很大差异。 【参考方案1】:

问题已解决。我们的公司政策不允许服务在“本地系统”权限下运行时与 Internet 通信。我暂时更改为使用我的用户凭据运行,它通过了。

【讨论】:

以上是关于仅在通过 Windows 服务使用 WCF 时“无端点侦听”的主要内容,如果未能解决你的问题,请参考以下文章