WCF服务可在Server 2012 R2上运行,但在2016年会引发错误

问题描述

我有一个已在Server 2012R2上运行的WCF服务。我尝试将服务移至Server 2016并开始出现以下错误

类型'MyService',作为ServiceHost指令中的Service属性值提供,或在配置元素system中提供。找不到服务模型/ serviceHostingEnvironment / serviceActivations。

我实际上将整个目录从一台服务器移到了另一台服务器-因此所有代码和设置都相同。

我的服务在web.config中的配置如下:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  ...
  <services>
    <service name="MyService" behaviorConfiguration="BehaviorConfig">
       <endpoint address="" binding="webHttpBinding" behaviorConfiguration="json" contract="IMyService">
           <identity>
              <dns value="localhost" />
           </identity>
       </endpoint>
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

我的myservice.svc看起来像这样:

<%@ ServiceHost Language="C#" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %>

是的,包含该服务的.dll在我的Bin目录中。

我的服务定义如下:

[ServiceContract(Namespace="")]
public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method ="POST",RequestFormat=Webmessageformat.Json,ResponseFormat = Webmessageformat.Json,BodyStyle = WebMessageBodyStyle.Wrapped)]
    string Validate(string userId,string userText);

    [OperationContract]
    [WebInvoke(Method = "GET",RequestFormat = Webmessageformat.Json,ResponseFormat = Webmessageformat.Json)]
    void UserName(string userId);
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService: BaseService,IMyService
{
  //Implementation here
}

因此,我读了许多帖子,指出.svc文件应该包含服务类型-包括名称空间。但是,就我而言,没有名称空间。

该项目面向.NET Framework 4.6.1。

我想念什么?

解决方法

我在Windows Server 2012 R2上发布了WCF服务,文件目录如下:

enter image description here

bin目录中的文件:

enter image description here

然后我将整个目录复制到Windows Server 2016,它能够成功运行。

enter image description here

在此过程中我没有遇到任何问题,您可以参考复制到Windows Server 2016的文件。您需要检查目录中是否缺少某些文件。如果仍然无法使用,建议您在2016年重建项目,然后再进行部署。

,

我终于做到了。经过数小时的混乱之后,我终于意识到,在原始服务器上,我的Services子文件夹也已成为自己的Web应用程序。 IOW,我在Web应用程序中有一个Web应用程序。

在新服务器上,我没有将服务子文件夹转换为Web应用程序。