1

我已经使用了这个 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>

我哪里错了?

4

1 回答 1

0

您可能必须启用Net.TCP 端口共享服务

Windows Communication Foundation (WCF) 使用称为 Net.TCP 端口共享服务的 Windows 服务来促进跨多个进程共享 TCP 端口。此服务作为 WCF 的一部分安装,但作为安全预防措施,默认情况下未启用该服务,因此必须在首次使用之前手动启用。

于 2012-12-03T10:27:01.167 回答