Невозможно получить доступ к службе WCF с клиентского компьютера - PullRequest
1 голос
/ 19 августа 2011

Невозможно получить доступ к службе 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 в клиентском проекте ... но не повезло

Что я должен изменить, чтобы он заработал?пожалуйста, помогите.

Это App.config моего Сервиса WCF, который совпадает с app.config службы Windows: по запросу Тима

<?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 Ответ

1 голос
/ 19 августа 2011

В предположении я бы проверил три вещи:

  1. Когда вы добавляете сервисную ссылку к своему клиенту, вы добавляете ее из net.tcp://localhost:8010/WCFService.Service1/ или из net.tcp://server17:8010/WCFService.Service1/?

  2. Если вы добавляете его с сервера17, попробуйте использовать полное имя сервера - то есть server17.mydomain.com или что бы то ни было.

  3. Ошибка подключения, вероятно, связана с адресом конечной точки, который вы используете - клиент передает serverPrincipalName «host / server17.domain.com», но вы пытаетесь подключиться к localhost.

Нет гарантий, что все вышеперечисленное является основной причиной, но это дает вам место для начала.

EDIT

Вы указываете locahost в элементе baseAddress, но ничего не указываете в атрибуте адреса элемента endpiont. Наверное, поэтому он все еще собирается на 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" />

Попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...