WCF недоступен в Azure - PullRequest
       2

WCF недоступен в Azure

0 голосов
/ 20 января 2011

У меня есть служба WCF, размещенная в веб-роли в Azure.

Когда я тестирую его в dev fabric, он нормально работает с моей веб-страницы (другая веб-роль).

Но когда я развертываю его в облаке, он, похоже, не работает, хотя веб-ролик готов.

Когда я использую Fiddler для выполнения GET на одном из открытых методов моей службы WCF, я получаю:

[Fiddler] Подключение к xxxxxxxxxxxxxx.cloudapp.net не удалось. Текст исключения: попытка подключения не удалось, потому что подключенная сторона сделала не отвечает должным образом после периода время или не удалось установить соединение потому что подключенный хост не смог ответить yyyyyyyyyyyyyy

Это конфигурация службы:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="GovGuard" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="GovGuard.Services">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="GuardServiceEndpointBinding" endpointName="GuardServiceEndpoint" />
        </Bindings>
      </Site>
    </Sites>
    <ConfigurationSettings>
      <Setting name="DevelopmentConnectionString" />
      <Setting name="GovGuardStorageConnectionString" />
    </ConfigurationSettings>
    <Endpoints>
      <InputEndpoint name="GuardServiceEndpoint" protocol="http" port="81" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <LocalResources>
      <LocalStorage name="MyCompany.GovGuard.Services.svclog" sizeInMB="1000" cleanOnRoleRecycle="false" />
    </LocalResources>
  </WebRole>
  <WebRole name="GovGuard.Web">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="GuardWebEndpointBinding" endpointName="GuardWebEndpoint" />
        </Bindings>
      </Site>
    </Sites>
    <ConfigurationSettings>
      <Setting name="GuardServiceUrl" />
      <Setting name="DevelopmentConnectionString" />
      <Setting name="GovGuardStorageConnectionString" />
    </ConfigurationSettings>
    <Endpoints>
      <InputEndpoint name="GuardWebEndpoint" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <LocalResources>
      <LocalStorage name="MyCompany.GovGuard.Web.svclog" cleanOnRoleRecycle="false" sizeInMB="1000" />
    </LocalResources>
  </WebRole>
</ServiceDefinition>

(редактировать) В моем исследовании проблемы это может быть так: я использую сборку Microsoft.SqlServer.Types в качестве ссылки на файл в проекте WCF. Я использую copy-local = true, чтобы скопировать сборку в папку bin, и она упакована в файл .csx. Но .... Microsoft.SqlServer.Types также нужна библиотека SqlServerSpatial.dll (не сборка). Я создал скрипт postbuild, чтобы скопировать эту dll в корзину, но у меня ничего не получилось ....

Может быть, кто-то может помочь мне, как упаковать dll (не сборку) в файл .csx ....

(изменить) Нашел здесь: http://msdn.microsoft.com/en-us/gg271395

Ответы [ 2 ]

1 голос
/ 21 января 2011

Наконец, решение, которое работает: я разрабатываю на 32-битной машине Win7 и скопировал SqlServerSpatial.dll со своей машины в проект WCF (с копией в каталог вывода и контентом BuildAction).Это вызвало странное сообщение об ошибке в облаке, потому что эта библиотека была 32-битной!Я обновил библиотеку до 64-битной версии, и теперь после развертывания в облаке все работает!

1 голос
/ 21 января 2011

WCF не играет хорошо, если вы пытаетесь сделать самодостаточный сервис.

Из-за того, как происходит регистрация HTTP.sys, он делает это на имени локального компьютера и не позволяет выполнять подстановочный знак, принимая имя с балансировкой нагрузки. У вас есть возможность использовать внутреннюю конечную точку и попытаться подключить с вашего веб-хоста IP-адрес рабочей роли.

В итоге я просто преобразовал службу WCF в конечную точку MVC и превратил мою рабочую роль в веб-приложение. Это не самый элегантный, но это сработало.

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