【发布时间】:2017-04-12 17:42:54
【问题描述】:
更新
该服务正在运行,并且在任务管理器中有一个 pid,但是当我运行 netstat -ano | find pid# 时没有返回任何内容 - 端口没有在监听。
另外,如果我运行netstat -ap tcp,则端口未列出。
我真的不知道如何解决这个问题。总而言之,您不必阅读我之前的帖子:
- 我的 WCF 服务在 localhost 下完美运行(即服务和客户端在同一台服务器上)
- 当我将服务发布到生产服务器时,服务安装正常,但 8523 端口不监听
- 我查看了几篇类似的帖子,但没有一个适合我
- 这是我尝试的第一个 WCF 项目,所以我已经用尽了我的知识,我无法在 Internet 上找到更多示例来尝试
- 在这一点上,我将非常感谢任何指点
环境
- 开发:Windows 7
- Visual Studio:2015 年
- 生产服务器:Windows Server 2008 R2 数据中心
- IIS 版本 7.5.7600.16385
简介
我已经研究这个问题几天了,虽然我在 Stack Overflow 上发现了许多类似的问题,但这些问题都没有解决我的问题;因此,我不认为这是重复的,如果有人像我一样尝试遵循引用的 Microsoft 教程,这将特别有帮助
问题详情
我在https://msdn.microsoft.com/en-us/library/ff649818.aspx 关注了这篇 Microsoft 文章“如何:使用 TCP 在 Windows 服务中托管 WCF”。
创建解决方案后,它可以在 Visual Studio localhost 环境中的我的开发机器上完美运行。本教程建议您创建一个测试客户端来访问 WCF 解决方案,并且该测试客户端可以成功运行
当我在生产机器 (Windows Server 2008) 中发布 WCF 服务和 Windows 服务时,它会再次安装而没有错误。以下是我遵循的步骤:
IIS 设置
将 net.tcp 添加到启用的协议中
激活“Windows Communication Foundation 非 HTTP 激活”
将 net.tcp 的绑定更改为 8532
确保“Net.Tcp 侦听器适配器”正在运行
在防火墙中打开 8532 端口
浏览到WindowsService1.exe所在项目的bin目录,以管理员身份运行该exe
以管理员身份打开命令提示符并运行 Installutil WindowsService1.exe
Localhost(Visual Studio 中的开发环境)和生产环境的区别
本地 WCF 系统和生产系统之间的唯一变化是我将 app.conf 中的 baseAddress 从
- "net.tcp://localhost:8523/CustomWCFService"
到
- “net.tcp://10.2.1.1:8523/CustomWCFService”
这里是部署的 app.conf
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service name="MyCustomServiceLib.CustomServiceLib">
<endpoint address="" binding="netTcpBinding" bindingConfiguration=""
contract="MyCustomServiceLib.ICustomServiceLib">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://10.2.1.1:8523/CustomWCF" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
添加服务参考
当我尝试在将使用 WCF 服务的应用程序中添加服务引用时。我收到此错误:
从地址下载元数据时出错。请 验证您输入的地址是否有效
当我点击“详细信息”时,我看到了这个:
URI 前缀无法识别。元数据包含一个引用 无法解决:'net.tcp://10.2.1.1:8523/CustomWCF'。不能 连接到 net.tcp://10.2.1.1:8523/CustomWCF。连接尝试 持续了 00:00:01.0312368 的时间跨度。 TCP 错误代码 10061:否 可以建立连接,因为目标机器主动拒绝 它是 10.2.1.1:8523。无法建立连接,因为目标 机器主动拒绝它 10.2.1.1:8523 如果服务定义在 当前解决方案,尝试构建解决方案并添加服务 再次参考。
我尝试过的
在论坛上提出的许多其他 WCF 问题似乎与让服务在 localhost 中运行有关,这不适用于我,因为我创建的解决方案在开发环境中完美运行。
一些答案建议在项目中启用 tcp 端口共享,但是当我尝试在我的解决方案中添加此代码时,我收到一条错误消息“不允许”。
其他问题建议该url必须在生产服务器上注册但没有效果。
在尝试了我能找到的所有论坛建议并尝试纠正我认为错误的所有内容后,我仍然没有运气。
任何建议或指点将不胜感激
【问题讨论】:
-
我忘记提到的一个重要点是当我运行 netstat -ona | find "8523" 没有返回任何内容。如果端口未在侦听,则服务将无法工作