发布后在 Azure 云服务中托管的 WCF 服务错误

Posted

技术标签:

【中文标题】发布后在 Azure 云服务中托管的 WCF 服务错误【英文标题】:WCF Service hosted in Azure Cloud Service errors after published 【发布时间】:2014-10-05 17:56:55 【问题描述】:

我有一个包含多个 WCF 服务(REST 和 SOAP 混合)的项目。该项目已经在本地运行了 6 个月,没有出现任何问题。我们正在将其移至 Azure,但遇到了一个阻止我们上线的问题。

该项目使用 Autofac 作为其 IOC。我们打算在 Azure 的云服务中托管它。在 Azure 模拟器中本地运行时,一切似乎都正常工作,但是一旦我们使用云服务项目进行部署,一切都会正确构建和部署,但在尝试访问服务时会收到以下错误。

Server Error in '/' Application.


Value cannot be null. Parameter name: key

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.ArgumentNullException: Value cannot be null. Parameter name: key Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentNullException: Value cannot be null.

Parameter name: key]

   System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) +48

   System.Collections.Generic.Dictionary`2.FindEntry(TKey key) +38

   System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value) +20

   System.ServiceModel.Dispatcher.WebHttpDispatchOperationSelector..ctor(ServiceEndpoint endpoint) +2459

   System.ServiceModel.Description.WebHttpBehavior.GetOperationSelector(ServiceEndpoint endpoint) +125

   System.ServiceModel.Description.WebHttpBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) +1955

   System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +4245

   System.ServiceModel.ServiceHostBase.InitializeRuntime() +119

   System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +45

   System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +553

   System.ServiceModel.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity) +350

   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +1614

[ServiceActivationException: The service '/Event/Calendar' cannot be activated due to an exception during compilation.  The exception message is: Value cannot be null.

Parameter name: key.]

   System.Runtime.AsyncResult.End(IAsyncResult result) +925

   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +528

   System.ServiceModel.Activation.AspNetRouteServiceHttpHandler.EndProcessRequest(IAsyncResult result) +107

   System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +151

服务配置端点似乎存在问题。这是通过 Autofac WCF 集成在此处使用 OOTB RouteTable 注册的:

RouteTable.Routes.Add(new ServiceRoute("Event/Calendar", new AutofacWebServiceHostFactory(), typeof(CalendarSvc)));

所有这些在 IIS 和本地 Azure 模拟器中都可以正常工作,但一旦部署到云服务,我们就会遇到问题。

【问题讨论】:

您在 azure 中有任何子域/项目吗?你的 WCF 项目是父项目/域吗? 我们没有任何子域,所以是的,它是唯一的父域 在 azure 父目录中没有虚拟目录名称,但在本地 IIS 中它有,因此为了测试目的,请在没有虚拟目录名称和 ser 的浏览器中打开它适合你。 【参考方案1】:

观察到的确切问题。通过取消此托管服务上的 IntelliTrace 解决。

我从 VS2013 发布并在发布期间标记了“启用 IntelliTrace”。一旦我取消了这个选项并重新发布 - 一切正常......

【讨论】:

是的。我在启用 IntelliTrace 时遇到了同样的问题。 我遇到了同样的问题,这解决了。你知道为什么会这样吗? IntelliTrace 对我们的项目很重要,因此我们宁愿启用它。但是,当然,始终首选工作服务。我只是希望您能指出正确的方向,为什么 IntelliTrace 似乎是这里的罪魁祸首。有人吗? @JcFx 也许你也可以帮我解释一下? @iamnobody - 不,我从来不知道为什么。刚刚停止在该项目上使用 IntelliTrace。

以上是关于发布后在 Azure 云服务中托管的 WCF 服务错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure 应用服务中托管的 WCF 服务时出现凭据错误

在 Azure 中托管 WCF 和可扩展性怎么样?

将 WCF SOAP 和 WCF REST 服务托管为 Azure 应用服务

Azure 功能无法访问托管在内部 windows 服务器中的 WCF 服务

如何结合调试 Azure 应用服务和 IIS 托管的 WCF?

如何从 Azure Web 应用程序与 IIS 中本地托管的 WCF 服务进行通信?