我的解决方案中有 3 个项目。
- 测试客户端 => 用于通过 tcp ip 添加引用和访问
- WcfServiceLibruary1 => 用于执行我的方法
- WindowsService1 => 用于作为 Windows 服务安装和运行(帐户:网络服务,开始类型:自动)
我在 msdn 示例上使用了所有相同的代码
http://msdn.microsoft.com/en-us/library/ff649818.aspx
我使用具有 2 个方法的 wcf 服务。我想在托管的 windows 服务中使用这个 wcf 服务。我在我的解决方案中添加了一个 windows 服务并设置引用的东西。
我在我的 wcf - app.config 上使用此地址引用:
net.tcp://localhost:2023/Service1
现在的问题是:
我成功地使用添加对我的测试客户端项目的引用
net.tcp://localhost:2023/Service1
:
但是这个参考地址不能作为windows服务安装!!!当我将它安装为 Windows 服务时,我无法访问此地址,并且出现此错误:No connection could be made because the target machine actively refused it
WcfServiceLibrary app.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="WcfServiceLibrary1.Service1">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="" contract="WcfServiceLibrary1.IService1">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:2023/Service1"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
我的 Windows 服务:
protected override void OnStart(string[] args)
{
if (myServiceHost != null)
{
myServiceHost.Close();
}
myServiceHost = new ServiceHost(typeof(Service1));
myServiceHost.Open();
}
当我在 visualstudio 服务主机上启动时,一切正常: