仅在通过 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 时“无端点侦听”的主要内容,如果未能解决你的问题,请参考以下文章

WCF 错误 401 未经授权仅在某些电脑上

使用无文件激活时如何启用 WCF 服务发现?

如何在 ajax 客户端中使用作为 Windows 服务运行的 wcf 服务

使用 WCF 通过 Windows 服务和 Windows 窗体应用程序进行通信

使用 WCF NetNamedPipe 与客户端通信的 Windows 服务

是否可以通过 httpwebrequest 使用 WCF 服务(托管为 Windows 服务托管)?