我已经使用了这个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
的文件夹中的另一台计算机上。我在服务exe上运行InstallUtil
(就像我在我的计算机上一样)并安装得很好。我还更改了该文件夹的权限,以授予NETWORK SERVICE完整权限。
然后,我在控制面板,管理服务,服务中启动该服务。我已登录到数据库,并验证服务进程是否已启动。我无法判断WCF托管服务是否启动。
每当WCF托管服务启动时,在我的计算机上,我会收到一个气球通知和一个窗口,我可以查看mex地址等。当我安装到其他计算机上时,这不会发生。
我在目标计算机上安装了Juval Lowy的元数据资源管理器,但是它使用与我在计算机上完全相同的地址来声明无效地址(即引用localhost而不是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>
我哪里错了?
答案 0 :(得分:0)
您可能需要启用Net.TCP Port Sharing Service。
Windows Communication Foundation(WCF) 使用名为的Windows服务 Net.TCP端口共享服务 促进TCP端口的共享 跨多个流程。这个 服务是作为WCF的一部分安装的, 但该服务未启用 默认为安全预防措施 所以必须在之前手动启用 第一次使用。