0
public class Global : HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    private static void RegisterRoutes(ICollection<RouteBase> routes)
    {
        routes.Add(new ServiceRoute("Calculator", new WebServiceHostFactory(), typeof(CalculatorService)));
    }
}

<system.serviceModel>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true">
    <serviceActivations>
      <add factory="System.ServiceModel.Activation.ServiceHostFactory"
           relativeAddress="Calculator.svc"
           service="MyServer.CalculatorService"/>
    </serviceActivations>
  </serviceHostingEnvironment>
</system.serviceModel>

当我这样做并转到http://localhost/MyApp/Calculator.svc时,我收到一条错误消息,提示我需要 AspNetCompatability。所以我添加了[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]它并且它有效,唯一的事情是我担心如果我想使用替代的非 http 绑定,我会希望我的服务使用替代的传输方式(不仅仅是 http)。

奇怪的是,如果我没有将属性设置为 Allowed 或 Required,那么当我重建我的页面时,我会收到该错误。收到该错误后,我点击刷新,一切都很好。不仅是我通过网络浏览器查询 svc,而且如果我有一个应用程序,它在第一次连接时崩溃(如果服务器重新启动),然后它就可以工作了。是什么赋予了?

4

2 回答 2

2

我认为您的问题是配置混乱。您正在添加一条路线,同时您正在使用基于配置的激活来注册服务。使用一秒或一秒。您也可以使用路由并且仅使用基于 Http 的协议或非 http 协议但不使用路由。

于 2011-06-03T18:51:44.587 回答
1

不幸的是,是的,您必须启用 ASP.NET 兼容性才能使用ServiceRoutes. 这是因为 ASP.NET 运行时现在负责路由流量,而不仅仅是 IIS 模块。

于 2011-06-03T18:46:52.053 回答