Azure中无法访问WCF

时间:2011-01-20 13:57:36

标签: wcf azure

我在Azure中的webrole中托管了一个WCF服务。

当我在开发结构中进行测试时,它可以从我的网页(其他网络角色)中正常工作。

但是当我在云中部署它时,它似乎没有运行,尽管webrole已经准备就绪。

当我使用Fiddler对我的WCF服务的一个公共方法进行GET时,我得到:

  

[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复制到bin中,但是我没有成功....

也许有人可以帮我解决如何将dll(不是程序集)打包到.csx文件中....

(编辑) 在这里找到它:http://msdn.microsoft.com/en-us/gg271395

2 个答案:

答案 0 :(得分:1)

如果您尝试进行自托管服务,WCF播放效果不佳。

由于HTTP.sys注册的方式发生,它在本地计算机名称上执行,并且不允许您执行通配符注册接受负载平衡名称。您拥有的选项是使用内部端点并尝试从Web主机连接辅助角色的IP。

我最终做的只是将我的WCF服务转换为MVC端点,并使我的worker角色成为Web应用程序。它不是最优雅的,但它确实有用。

答案 1 :(得分:1)

最后有效的解决方案:我在32位Win7机器上开发,并将SqlServerSpatial.dll从我的机器复制到WCF项目(使用Copy to Output Directory和BuildAction Content)。这在云中引起了一个奇怪的错误消息,因为该库是32位的!我用64位版本更新了库,现在在云中部署之后一切正常!