开发者

Unable to access WCF Service from Client machine

Unable to access WCF Service from Client machine

  • I have three projects : WCF Service (VS-2008), Windows Service (VS-2008), Client (VS-2005)
  • The WCF service has netTcpBinding
  • This service is hosted as a windows service and not on IIS

The base address for both the service (WCF and Windows) is

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

Now when i add a service reference to the client project which is on VS-2005, It updates my app.config file

<?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="Enc开发者_开发知识库ryptAndSign" />
                        <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>

And adds Service1.map file as

<?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>

When I call any of the service methods I get an error stating

Could not connect to net.tcp://localhost:8010/WCFService.Service1/. The connection attempt lasted for a time span of 00:00:02.0063936. TCP error code 10061: No connection could be made because the target machine actively refused it 127.0.0.1:8010.

At least it should be net.tcp://server17:8010/WCFService.Service1/

I have already tried to replace localhost with server17 in the client project... but no luck

What should I change to make it working? please help.

This is my WCF Service's App.config which is same as windows service's app.config : as requested by 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>


At a guess I'd check three things:

  1. When you add the service reference to your client, are you adding it from net.tcp://localhost:8010/WCFService.Service1/, or are you adding it from net.tcp://server17:8010/WCFService.Service1/?

  2. If you're adding it from server17, try using the fully qualified name of the server - i.e., server17.mydomain.com or whatever it is.

  3. The connection error is probably related to the endpoint address you're using - the client is passing in a serverPrincipalName of "host/server17.domain.com", but you're attempting to connect to localhost.

No guarantees any of the above are the root cause, but it gives you a place to start.

EDIT

You specify the locahost in the baseAddress element, but you don't specify anything in the address attribute of the endpiont element. That's probably why it's still going to localhost.

Modify the config file for your service to either change the baseAddress to:

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

or drop the baseAddresses and specify the address in your endpoint:

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

Give that a try.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜