Asp.net Windows Server 2012中的.svc文件响应为“0”;405“不允许使用方法”;

Asp.net Windows Server 2012中的.svc文件响应为“0”;405“不允许使用方法”;,asp.net,iis,iis-8,windows-server-2012,Asp.net,Iis,Iis 8,Windows Server 2012,当我使用.svc-ASP.Net 4服务将我的网站从Windows Server 2008复制到Windows Server 2012时,Silverlight应用程序触发的每个.svc请求都会得到405响应 在WindowsServer2008中,一切都运行得很好 我尝试了aspnet_regiis和WCF寄存器(ServiceModelReg)。.svc文件也包含在IIS 8中的模块映射中。我还卸载了ASP.NET 4.5+3.5并重新安装了它和WCF HTTP主机 所有网站都受此迁移影响

当我使用.svc-ASP.Net 4服务将我的网站从Windows Server 2008复制到Windows Server 2012时,Silverlight应用程序触发的每个.svc请求都会得到405响应

在WindowsServer2008中,一切都运行得很好

我尝试了aspnet_regiis和WCF寄存器(ServiceModelReg)。.svc文件也包含在IIS 8中的模块映射中。我还卸载了ASP.NET 4.5+3.5并重新安装了它和WCF HTTP主机

所有网站都受此迁移影响

请求:

POST /Data/search.svc HTTP/1.1
Accept  */*
答复:

HTTP/1.1 405 Method Not Allowed
Allow:  GET, HEAD, OPTIONS, TRACE
这些文件如下所示,我还尝试添加“WebInvoke”

[ServiceContract]
public interface IPackages
{
    /// <summary>
    /// Gets a package by a public key
    /// </summary>
    /// <param name="publicKey">Used public key</param>
    /// <returns>Information about the package</returns>
    [OperationContract]
    PackageInformation GetPackageByPublicKey(string publicKey);

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Packages" in code, svc and config file together.
public class Packages : IPackages
{
    /// <summary>
    /// Gets a package by a public key
    /// </summary>
    /// <param name="publicKey">Used public key</param>
    /// <returns>Information about the package</returns>
    public PackageInformation GetPackageByPublicKey(string publicKey)
    {
            return packageManager.GetPackageByPublicKey(publicKey);
    }
}
[服务合同]
公共接口IPackages
{
/// 
///通过公钥获取包
/// 
///使用的公钥
///关于包裹的信息
[经营合同]
PackageInformation GetPackageByPublicKey(字符串publicKey);
//注意:您可以使用“重构”菜单上的“重命名”命令来同时更改代码、svc和配置文件中的类名“Packages”。
公共类包:IPackages
{
/// 
///通过公钥获取包
/// 
///使用的公钥
///关于包裹的信息
公共包信息GetPackageByPublicKey(字符串publicKey)
{
返回packageManager.GetPackageByPublicKey(publicKey);
}
}

谢谢您的提示。

我必须为*.svc创建一个新的托管处理程序,其类型如下:

 System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

很奇怪,默认情况下没有这样做。

在Windows 2012上,您需要转到服务器管理器,然后添加角色和功能。单击“下一步”几次,直到进入“服务器角色”选项。从那里,展开应用程序服务器并选择“Web服务器(IIS)支持”。接下来,您需要选择Http激活和TCP激活(我两者都做了),这就是2012年支持WCF的原因


它应该为您选择所有必需的依赖项,但您可能还需要转到“Web服务器(IIS)”部分,然后转到“应用程序开发”并选择所需的ASP.NET选项(我已经先安装了这些选项,所以如果只执行支持选项,我不知道是否有必要这样做)。这将为您创建.svc处理程序。

以澄清并扩展已接受的答案,以期在将来有所帮助(这对我帮助很大,我讨厌在传统应用程序中使用SilverLight)

  • 在Windows 2012上,转到服务器管理器,然后单击添加角色和 特征

  • 单击“下一步”几次,直到进入服务器角色 选项

  • 从那里,检查应用服务器并单击next两次

  • 选择“Web服务器(IIS)支持”,将出现一个弹出窗口 列出功能,单击添加功能按钮,然后单击下一步按钮 然后单击安装按钮

  • “接下来,您需要选择Http激活,可能还有TCP激活 (我两者都做了),这就是在2012年支持WCF的原因。”

  • 要执行此操作,请返回服务器管理器并单击添加角色和 特征

  • 单击“下一步”几次,直到进入服务器角色 选项,然后在左侧面板中单击“要素”条目

  • 然后展开.Net 4.5,然后展开WCF服务,然后选择HTTP 激活(此时可以使用其他类型,根据需要添加),然后继续安装

  • 这些步骤为我解决了405问题


    我只需要HTTP激活。

    您也可以使用一行PowerShell(或者两行,如果您还需要TCP激活):
    安装WindowsFeature NET-WCF-HTTP-Activation45
    (和
    安装WindowsFeature NET-WCF-TCP-Activation45
    )。请注意,即使您运行的是更高版本的.NET,这些仍然是要使用的功能名称。