Браузер подключается к службе WCF, но не к моему клиенту WCF. В чем может быть причина?

На рабочем сервере (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 установка в конфигурации привязки между истиной и ложью без успеха.

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

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

Редактировать:

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

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

4 ответа

Решение

Хотя 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, (изменил мой ответ сейчас)

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

<proxy usesystemdefault="True" />

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

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

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

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

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

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

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

Другие вопросы по тегам