无法访问Windows服务中托管的WCF

时间:2016-07-11 16:33:40

标签: c# wcf

对于使用WCF的3层客户端/服务器应用程序,我有一个非常奇怪的问题。

首先,我有一个服务窗口,它在basicHttpBinding中托管WCF服务。这是服务器app.config:

<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <services>
            <service name="Business.BSServiceManagement" behaviorConfiguration="myServiceBehave">
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:35001"/>
                    </baseAddresses>
                </host>
                <endpoint address="/Clients" binding="basicHttpBinding" name="Clients" contract="Contracts.BusinessFacade.IBFClientManagement"/>
                <endpoint address="/Users" binding="basicHttpBinding" name="Users" contract="Contracts.BusinessFacade.IBFUserManagement"/>
                <endpoint address="/Licences" binding="basicHttpBinding" name="Licences" contract="Contracts.BusinessFacade.IBFLicenceManagement"/>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="myServiceBehave">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

此服务部署在DMZ的服务器上,我可以从我的计算机访问(在firefox中,如果我将服务地址与端口号一起使用)

其次,我有一个使用winforms制作的客户端应用程序,它使用ChannelFactory服务。

这是客户端app.config:

<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <client>
            <endpoint address="http://192.168.128.1:35001/Clients" binding="basicHttpBinding" name="Clients" contract="Contracts.BusinessFacade.IBFClientManagement"/>
            <endpoint address="http://192.168.128.1:35001/Users" binding="basicHttpBinding" name="Users" contract="Contracts.BusinessFacade.IBFUserManagement"/>
            <endpoint address="http://192.168.128.1:35001/Licences" binding="basicHttpBinding" name="Licences" contract="Contracts.BusinessFacade.IBFLicenceManagement"/>
        </client>
    </system.serviceModel>
</configuration>

当我调试客户端应用程序时,一切都很完美。所以我做了一个安装程序项目来在几台计算机上部署应用程序,但是当我执行应用程序的exe(安装或直接在bin / release中)时,我有一条错误消息:

There was no endpoint listening at http://192.168.128.1:35001/Users...

内部例外说:

  

无法连接到远程服务器

我尝试添加mex端点,更改端口号,检查服务器和客户端计算机防火墙,我不明白问题出在哪里。

感谢您的帮助。

编辑1:

经过多次测试后,我在release exe中遇到了同样的问题,但在调试exe中没有。

如果我执行调试exe,则一切正常,但release exe会返回错误消息。

1 个答案:

答案 0 :(得分:0)

问题在于您的服务。

确保服务已启动并正在运行。

启动服务后,浏览URL(例如:localhost:8080 / example),以确保服务正常运行。

将Service Reference添加到客户端应用程序时,它会自动在app.config文件中生成端点。

将Installer添加到客户端项目时,请确保它是成功构建的。

当你安装它时,它应该适合你。