Браузер подключается к службе WCF, но не к моему клиенту WCF.В чем может быть причина? - PullRequest
3 голосов
/ 15 июня 2010

На рабочем сервере (Windows Server 2003 с пакетом обновления 2) я могу подключиться к удаленной службе WCF с помощью Internet Explorer 8: при просмотре URL-адреса http://www.domain.com/Service.svc (где прослушивает моя служба) я получаю ожидаемую страницу с информацией услуги отображаются. В настройках подключения в Internet Explorer указывается только «автоопределение», настройки прокси отключены.

Если я запускаю консольное приложение (созданное с WCF в .NET 4.0) на том же сервере, который также пытается подключиться к той же службе WCF, оно не сообщает о том, что ни одна конечная точка не была доступна для прослушивания http://www.domain.com/Service.svc.

Конфигурация клиента WCF:

<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            bypassProxyOnLocal="false" transactionFlow="false"
            hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
            allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" 
              maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
              enabled="false" />
          <security mode="None">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://www.domain.com/Service.svc"
          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyService"
          contract="Service.IMyService" name="WSHttpBinding_IMyService" />
    </client>
  </system.serviceModel>
<configuration>

С этими настройками я могу успешно обмениваться данными с удаленным сервисом с моей машины разработки.

Осматривая другие варианты, я обнаружил, что могу указать, использовать настройки прокси-сервера Internet Explorer с помощью:

<system.net>
  <defaultProxy>
    <proxy usesystemdefault="true" />
  </defaultProxy>
</system.net>

Это не сработало, и я не уверен, правильно ли я понял эту настройку. (Я надеялся, что клиент WCF примет параметр «автоопределение» Internet Explorer, а затем подключится к службе таким же образом, как установленный IE.)

Я также переключил настройку useDefaultWebProxy в конфигурации привязки между true и false, но безуспешно.

Теперь я прошу помощи, что я могу сделать? Какие настройки могут быть неправильными или отсутствующими? Что можно проверить и как получить более подробные сообщения об ошибках, чтобы лучше определить проблему?

Заранее спасибо!

Edit:

Стек в Innerexception говорит:

  • System.Net.WebException : не удалось установить соединение с удаленным сервером
  • System.Net.Sockets.SocketException : Соединение не удалось, поскольку хост не ответил после определенного промежутка времени, или соединение было прервано, так как подключенный хост не ответил.

Ответы [ 4 ]

2 голосов
/ 15 июня 2010

Хотя Internet Explorer может подключаться к службе без указания прокси-адреса, но только с включенной функцией «автоопределения», это не работает с моим клиентом WCF при установке <proxy usesystemdefault="true" />. (Документация гласит: это подберет настройки Internet Explorer. Но это не работает.) Наконец, клиент дал мне конкретный прокси-адрес, и я изменил привязку в конфигурации моего клиента следующим образом:

  • Изменено: useDefaultWebProxy="false" (вместо true)
  • Добавлено: proxyAddress="http://10.20.30.40:8080" (Edit2: важен не только IP-адрес! Префикс с http:// важен! В противном случае он выдаст новые исключения, см. Следующий вопрос ниже.)

При этом исчезли WebException и SocketConnection, и клиент, похоже, подключился к службе, но у меня возникла следующая проблема при вызове первой операции службы. Я поставлю это в новом вопросе.

Редактировать: вот следующий вопрос:

Странное исключение при подключении к службе WCF через прокси-сервер

Edit2: в соответствии с ответом в последующем вопросе важно поставить префикс proxyAddress с http. (изменил мой ответ сейчас)

0 голосов
/ 02 сентября 2015

Проблема здесь, возможно, была такой же простой, как и в случае истинного против True

<proxy usesystemdefault="True" />
0 голосов
/ 15 июня 2010

Возможно, вы просто ввели опечатку в свой адрес на клиенте ??

address="http://www.domain.com/Service.scv"

Разве это не должно быть

address="http://www.domain.com/Service.svc" 

(. Svc вместо .scv в конце) (подтверждено, что в действительности это не опечатка)

Кроме того, этот адрес будет указывать, что ваш * .svc файл находится в корне этой машины - так ли это на самом деле? Обычно в IIS ваш адрес состоит из имени машины, виртуального каталога, в котором находится файл * .svc, и самого файла * .svc, поэтому что-то вроде:

http://www.domain.com/ServiceDirectory/Service.svc
0 голосов
/ 15 июня 2010

Я не уверен, как вы размещаете свой сервис, IIS?

Я действительно не видел ничего плохого в конфигурации, кроме

  <security mode="None">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
        realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="true"/>
  </security>

Если вы говорите, что когда вы вводите адрес в IE, вы видите сервис, то это заставляет меня поверить, что это неправильные настройки безопасности. Попробуйте снять блокировку безопасности с конфигурационного файла клиента или там, где он у вас есть, и посмотрите, работает ли он ...

Если это произойдет, мы могли бы сузить это ...

...