带区域的 Orchard/MVC WCF 服务 URL

2024-02-11

Bertrand 创建了一个博客post http://weblogs.asp.net/bleroy/archive/2011/04/20/orchard-1-1-what-s-in-it-for-developers.aspx指定如何在 Orchard 的 WCF 模块中使用 IoC。

在 1.1 中,您可以使用新的 Orchard 主机工厂创建 SVC 文件:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="MyModule.IMyService, MyAssembly"
    Factory="Orchard.Wcf.OrchardServiceHostFactory, Orchard.Framework" %>
Then register your service normally as an IDependency but with service and operation contract attributes:

using System.ServiceModel;

namespace MyModule {
    [ServiceContract]
    public interface IMyService : IDependency {
        [OperationContract]
        string GetUserEmail(string username);
    }
}

我的问题是 Orchard 的所有模块实际上都是区域的。那么如何构建一条能够命中在区域/模块中创建的 svc 文件的路由呢?

您是否应该使用完整的物理路径来访问 svc 文件(尝试过,它导致了 web.config 问题,因为它桥接了站点和区域)。

http://localhost/modules/WebServices/MyService.svc

或者使用 WebServiceHostFactory/OrchardServiceHostFactory 创建 ServiceRoute?

new ServiceRoute("WebServices/MyService", new OrchardServiceHostFactory(), typeof(MyService))

无论我尝试什么,在尝试访问资源时都会收到 404 错误。我能够使用 wcf 应用程序项目并将 WCF 设置为独立应用程序来完成此工作,当尝试将其引入 Orchard/MVC 时,我的问题就开始了。

UPDATE

感谢 Piotr 的帮助,

这是我实施该服务所采取的步骤。

路线.cs

new RouteDescriptor {   Priority = 20,
                        Route = new ServiceRoute(
                                      "Services",
                                      new WebServiceHostFactory(),
                                      typeof(MyService)) }

如果我使用 OrchardServiceHostFactory() 而不是 WebServiceHostFactory() 我会收到以下错误。

Operation is not valid due to the current state of the object.

Orchard 根 Web.Config

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

我的服务

[ServiceContract]
public interface IMyService : IDependency
{
    [OperationContract]
    string GetTest();
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
class MyService : IMyService
{
    public string GetTest()
    {
        return "test";
    }
}

我无法仅通过修改模块的 web.config 来使服务正常工作。我收到以下错误

ASP.NET routing integration feature requires ASP.NET compatibility.

UPDATE 2

Orchard 根 Web.Config

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <!-- ... -->
  </system.serviceModel>

路线.cs

public IEnumerable<RouteDescriptor> GetRoutes() {
    return new[] {
                     new RouteDescriptor {   Priority = 20,
                                             Route = new ServiceRoute(
                                                 "Services",
                                                 new OrchardServiceHostFactory(),
                                                 typeof(IMyService))

                     }
                 };
}

这是可行的,这里的关键是您必须在引用 IDependency 的对象上调用 typeof,WorkContextModule.IsClosingTypeOf 无法处理消耗依赖项的对象,它必须采用直接调用它的 Interface。


正如您所说,Orchard 模块是 ASP.NET MVC 术语中的区域,因此您提供的 URL 不正确,应该是:

http://localhost/Your.Orchard.Module/WebServices/MyService.svc

Where 本地主机是您的应用程序运行所在的虚拟目录,/网页服务是模块根目录中的文件夹。

您还可以以编程方式创建服务路由,不会出现任何问题。This http://www.orchardproject.net/docs/Building-a-hello-world-module.ashx?#Adding_the_Route_3文章讲述了如何在 Orchard 中添加新路线。你可以只分配一个服务路线 to the RouteRouteDescriptor 的属性而不是默认的 MVC 路由(如文档中所示)。问题 https://stackoverflow.com/questions/4047485/expose-wcf-services-that-belong-to-an-area-in-mvc-app-at-a-routed-path之前曾询问过有关在支持区域的 ASP.NET MVC 应用程序中添加 ServiceRoute 的问题,请查看它,因为它可能会帮助您。

顺便说一句 - 你也可以检查this https://stackoverflow.com/questions/3186858/can-a-wcf-serviceroute-route-prefix-contain-a-path-value关于前缀服务路由的问题。

HTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带区域的 Orchard/MVC WCF 服务 URL 的相关文章

  • 具有自定义设计的 ASP.NET 复选框

    有没有办法改变asp net复选框的ui样式 我试过这个 cabeceraCheckBoxNormal background url ig res Default images ig checkbox off gif no repeat c
  • Marklogic REST API 搜索最新文档版本

    我们需要使用 Marklogic 的 REST API 将 MarkLogic 搜索限制为托管文档的最新版本 我们正在使用 MarkLogic 6 使用直接 xquery 您可以使用dls documents query 作为附加查询选项
  • Visual Studio 2010 - 在调试期间查看列表导致超时

    我正在尝试调试一个项目 突然遇到一个问题 如果我尝试查看它 枚举任何对象集合都会导致超时 如果我正常运行该程序 就没有问题 如果我尝试查看任何集合 例如列表 我会收到超时错误 整个事情就会崩溃 我认为我的一个更复杂的集合可能出了问题 所以我
  • 防止更新 ASP.NET MVC 和实体框架中未更改的值

    我正在使用 ASP NET MVC 和实体框架 我有一个 编辑人员 网页 可以在其中编辑人员的字段 然后在回发操作中 我使用以下代码 var person objectCtx Persons Where s gt s Id id First
  • 将 MVC 操作结果发送到打印机

    我有一个带有操作的控制器 SomeController ActionToBePrinted ActionToBePrinted 返回一个 html 视图 当按下按钮时 从普通的 mvc razor 视图调用此操作 当按下按钮时 我将如何将视
  • 如何自定义 DataTable 列的排序

    我需要对数据表列的值进行排序 该列包含字符串 整数或混合文本 例如 数据表列包含如下值 23 18 12 store 23 store a1 1283 25 如果我使用对值进行排序Dataview sort 方法会按此顺序产生 12 128
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • App_offline.htm、CSS、图像和 aspnet_isapi.dll

    因此 我正在开发的网站正在使用 urlrewriting 与 aspnet isapi dll 配合 所有内容都映射到它 我放置了 app offline htm 文件 所有文本均显示 但是 CSS 或图像未提供 我猜测由于通配符映射而不是
  • 重叠的回收和Application_Start

    我有一个使用 AppFabric 进行分布式缓存的 asp net Web 应用程序 在 Application Start 上 我初始化与 AppFabric 的连接 这通常需要几毫秒 这是完全可以接受的 有时可能需要长达30秒连接 在回
  • PreRequestHandlerExecute 中的会话为空

    在我的 ASP NET 4 0 应用程序中 我在 global asax cs 中有一个 PreRequestHandlerExecute 的事件处理程序 我想访问会话中的数据 大多数时候 会话是被定义的 但有时它是空的 有人可以解释一下什
  • 如何从另一个UserControl继承一个UserControl?

    是否可以从另一个用户控件继承用户控件 我想要实现的是从另一个用户控件继承的用户控件 所以我有baseusercontrol ascx 它只有文本 Stuff 然后我有另一个用户控件 childusercontrol ascx 继承了base
  • Chrome 87 在针对 Windows IIS 10 的 CORS 中的 Windows 身份验证失败

    Chrome 86 及更早版本 Edge Curl 和 IE 都能够对 Windows 2019 计算机上的 IIS 10 ASP NET 服务进行跨域 Windows 身份验证 没有任何问题 但 Chrome 87 失败 并显示 从源 h
  • 使用 Itextsharp 读取本地化 PDF 文件

    我正在尝试使用 iTextSharp 阅读 PDF 文件 问题是当尝试阅读英语以外的 PDF 文件 例如印地语或阿拉伯语 时 它无法获取正确的单词 我想知道 我应该在系统上安装印地语或阿拉伯字体 还是需要对编码进行一些处理 ITextExt
  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • 如何为WCF服务创建重定向?

    我的网站 A 上托管了一个 WCF 服务 我还有另一个网站 B 它使用 IIS URL 重写将所有请求重定向到我的网站 A 但是 站点 B 不处理任何对 svc 文件的请求 返回 404 not find 知道如何让它发挥作用吗 UPD重定
  • MVC 3 布局页面、Razor 模板和 DropdownList

    我想在我的网站的所有页面上包含年份的下拉列表 我认为放置此逻辑的好地方是布局页面 layout cshtml 如果用户更改年份 我想更改我的年份会话 ModelBinder 也进行更改 这对于 ASP NET Web 表单来说很容易做到 但
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return

随机推荐