我在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
答案 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位版本更新了库,现在在云中部署之后一切正常!