将 .NET 4 WCF 服务定位为 64 位的问题

Posted

技术标签:

【中文标题】将 .NET 4 WCF 服务定位为 64 位的问题【英文标题】:Problems targeting a .NET 4 WCF service to be 64 bit 【发布时间】:2011-05-08 10:16:17 【问题描述】:

我在将 .NET 4 WCF 服务定位为 64 位时遇到问题。我在 64 位 Vista 操作系统上采取以下步骤:

在 Visual Studio 2010 中创建一个新的 WCF 服务项目。

将平台目标更改为 x64。

执行此操作后,我的 WCF 服务将不再在 Cassini 或 IIS 中运行。需要注意的一点是,采取这些相同的操作并针对 .NET 3.5 一切正常。该项目构建没有问题。非常感谢任何帮助。我在加载服务时遇到的错误是:

(我不是在寻找“将其编译为任何 CPU”的答案。我更想知道为什么会发生这种情况。:-))

“/”应用程序中的服务器错误。 找不到类型“WcfService3.Service1”,作为 ServiceHost 指令中的服务属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.InvalidOperationException:类型“WcfService3.Service1”,作为 ServiceHost 指令中的 Service 属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[InvalidOperationException:类型“WcfService3.Service1”,作为 ServiceHost 指令中的服务属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。] System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +51902 System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +1440 System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +44 System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +615

[ServiceActivationException:服务'/Service1.svc'由于编译过程中的异常而无法激活。异常消息是:类型 'WcfService3.Service1',作为 ServiceHost 指令中的服务属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供找不到..] System.Runtime.AsyncResult.End(IAsyncResult 结果) +679246 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult 结果) +190 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication 上下文,字符串 routeServiceVirtualPath,布尔流上下文,布尔确保WFService)+234 System.ServiceModel.Activation.HttpModule.ProcessRequest(对象发送者,EventArgs e)+355 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.1

【问题讨论】:

【参考方案1】:

我认为原因在于 Cassini 网络主机是 32 位应用程序,因此您无法在同一进程内共享 x64 和 x86 运行时。

对于 IIS,您是否在它自己的应用程序池中运行它?同样,应用程序池可能会与 32 位应用程序共享,这将阻止您运行 x64 进程。如果您将虚拟目录与新的应用程序池相关联,则该过程应该可以正常加载。

【讨论】:

【参考方案2】:

在 ServiceHost 指令中作为 Service 属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。

【讨论】:

以上是关于将 .NET 4 WCF 服务定位为 64 位的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .Net 4.0 REST WCF 服务?

升级到 .NET 4.5 和 EF5。不再能够部署 WCF 服务。

将 WCF 应用程序从 .Net 框架转换为 .Net Core 时如何移植 <system.serviceModel> 配置?

将 .net 远程处理替换为 WEB API、WCF、SignalR 或 Akka.net

ASP.Net网站 未能加载文件或程序集 每次发布网站提示不同的程序集名 我使用VS2010,.Net3.5框架,32位的Win7

如何将 Json.Net 设置为 WCF REST 服务的默认序列化程序