我已经使用了这个 MSDN 教程,了解如何使用 Windows 服务作为主机使 WCF 与 net.tcp 绑定一起工作:
http://msdn.microsoft.com/en-us/library/ff649818.aspx
由于回调,我需要 nettcp,并且不想将 IIS 用作主机。
本教程在我的计算机上 100% 有效,并且我使用我自己的项目名称和方法等完成了第二个版本,这在我的计算机上也可以 100% 有效 - 无论是从 VS2010 运行还是当我使用 InstallUtil 并作为服务运行时.
我下载了 Juval Lowy 的元数据浏览器并在我的计算机上运行它,它找到了该服务。(来自www.idesign.net
)
我不能让它在另一台计算机上工作 - 即生产服务器。我还尝试在备用电脑上安装,看看这是否是与服务器相关的问题。但是,它们都没有 VS2010,这无关紧要,因为我正在作为 Windows 服务运行。
我从我的 vs2010 项目中复制/bin/Release
文件夹并将其放在另一台计算机上名为myapp
. 我InstallUtil
在服务 exe 上运行(就像我在计算机上所做的那样),它安装得很好。我还更改了文件夹的权限以授予 NETWORK SERVICE 完全权限。
然后我在控制面板、管理服务、服务中启动该服务。我已经登录到数据库并验证服务进程是否启动。我不知道 WCF 托管服务是否启动。
在我的计算机上,每当 WCF 托管服务启动时,我都会收到一个气球通知和一个可以查看 mex 地址等的窗口。当我安装到其他计算机上时,不会发生这种情况。
我已经在目标机器上安装了 Juval Lowy 的元数据浏览器,但它使用与我在计算机上完全相同的地址声明无效地址(即引用本地主机而不是 IP 地址)。
我认为我在其他计算机上安装的方法有问题。
相关代码为:
if (myServiceHost != null)
myServiceHost.Close();
myServiceHost = new ServiceHost(typeof(MyAppService));
myServiceHost.Open();
和app.config
:
<system.serviceModel>
<services>
<service behaviorConfiguration="netTCPBehavior" name="MyAppDll.MyAppDll">
<endpoint
address=""
binding="netTcpBinding" bindingConfiguration=""
contract="MyAppDll.IMyAppDll">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint
address="mex"
binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:7200/MyAppDll" />
</baseAddresses>
</host>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="netTCPBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我哪里错了?