无法从客户端计算机访问WCF服务

时间:2011-08-19 08:05:49

标签: wcf windows-services client

无法从客户端计算机访问WCF服务

  • 我有三个项目:WCF服务(VS-2008),Windows服务(VS-2008),客户端(VS-2005)
  • WCF服务具有netTcpBinding
  • 此服务作为Windows服务托管,而不是IIS

服务(WCF和Windows)的基地址是

net.tcp://localhost:8010/WCFService.Service1/

现在,当我向VS-2005上的客户端项目添加服务引用时,它会更新我的app.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="netTcpEndPoint" closeTimeout="00:01:00" openTimeout="00:01:00"
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false"
                    transferMode="Buffered" transactionProtocol="OleTransactions"
                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
                    maxReceivedMessageSize="65536">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192"         maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                    <security mode="Transport">
                    <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                        <message clientCredentialType="Windows" />
                    </security>
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://localhost:8010/WCFService.Service1/"
                binding="netTcpBinding" bindingConfiguration="netTcpEndPoint"
                contract="Client.Service1.IService1"
                name="netTcpEndPoint">
                <identity>
                    <servicePrincipalName value="host/server17.domain.com" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

并将Service1.map文件添加为

<?xml version="1.0" encoding="utf-8"?>
<ServiceReference>
    <ProxyGenerationParameters
        ServiceReferenceUri="net.tcp://server17:8010/WCFService.Service1/"
        Name="Service1"
        NotifyPropertyChange="False"
        UseObservableCollection="False">
    </ProxyGenerationParameters>
    <EndPoints>
        <EndPoint
            Address="net.tcp://localhost:8010/WCFService.Service1/"
            BindingConfiguration="netTcpEndPoint"
            Contract="Client.Service1.IService1"
            >
        </EndPoint>
    </EndPoints>
</ServiceReference>

当我调用任何服务方法时,我收到错误说明

  

无法连接到net.tcp:// localhost:8010 / WCFService.Service1 /。   连接尝试持续时间跨度为00:00:02.0063936。 TCP   错误代码10061:因为目标无法建立连接   机器主动拒绝它127.0.0.1:8010。

至少它应该是net.tcp://server17:8010/WCFService.Service1/

我已尝试在客户端项目中将localhost替换为server17但没有运气

我应该改变什么才能让它发挥作用?请帮忙。

  

这是我的WCF服务的App.config,它与windows服务相同   app.config:根据Tim的要求

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="WCFService.ServiceBehavior" 
        name="WCFService.Service1">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="" 
          name="netTcpEndPoint" contract="WCFService.IService1" />
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          name="mexTcpEndPoint" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8010/WCFService.Service1/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WCFService.ServiceBehavior">
          <serviceMetadata httpGetEnabled="False" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

1 个答案:

答案 0 :(得分:1)

猜测我会检查三件事:

  1. 将服务引用添加到客户端时,是从net.tcp://localhost:8010/WCFService.Service1/添加服务引用,还是从net.tcp://server17:8010/WCFService.Service1/添加服务引用?

  2. 如果您要从server17添加它,请尝试使用服务器的完全限定名称 - 即server17.mydomain.com或其他任何名称。

  3. 连接错误可能与您正在使用的端点地址有关 - 客户端传入的serverPrincipalName为“host / server17.domain.com”,但您正在尝试连接到localhost。 / p>

  4. 不保证上述任何一项是根本原因,但它为您提供了一个开始的地方。

    修改

    您可以在baseAddress元素中指定locahost,但不要在endpiont元素的address属性中指定任何内容。这可能就是为什么它仍然会转向localhost。

    修改服务的配置文件,将baseAddress更改为:

    <baseAddresses>
        <add baseAddress="net.tcp://server17:8010/WCFService.Service1/" />
    </baseAddresses> 
    

    或删除baseAddresses并指定端点中的地址:

    <endpoint address="net.tcp://server17:8010/WCFService.Service1/"
              binding="netTcpBinding" 
              bindingConfiguration=""
              name="netTcpEndPoint" 
              contract="WCFService.IService1" />
    

    试一试。