2011-01-20 2 views
0

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

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

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

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

[Скрипач] Подключение к 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 в bin, но мне это не удалось.

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

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

+0

Возможно, вам придется поделиться каким-то кодом ... распространенная ошибка заключается в том, что порт установлен на что-то отличное от 80. Возможно, вы захотите проверить свой ServiceDefinition.csdef. – smarx

ответ

1

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

1

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

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

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

+0

Привет Аарон. Мое решение работает. WCF не должен быть проблемой в Azure, но следите за использованием библиотек CLR, которые используют собственные библиотеки ... В моем случае вся служба WCF не была запущена, потому что я не включил родную библиотеку как часть Azure пакет! –

+0

Это потрясающе. Мои проблемы, вероятно, более глубоко укоренились в моих отношениях любви/ненависти с WCF, чем что-либо. –

Смежные вопросы