【问题标题】:Supporting WCF in ASP.NET MVC在 ASP.NET MVC 中支持 WCF
【发布时间】:2013-12-18 17:14:00
【问题描述】:

我正在尝试使同一个项目与 WCF 和 MVC 一起使用。

我的问题是:

MVC 运行良好,比我在 WCF 服务中包含的接口和 .svc。

当我尝试这样的事情时:

http://localhost:2986/PAGENAME.svc

我收到以下错误:

找不到资源。

注意:PAGENAME.svc 位于根目录(以及接口)。

期待这个问题,我在RegisterRoutes中包含了忽略方法:

routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
routes.IgnoreRoute("{resource}.svc");

但也没有用=/

有谁知道如何解决这个问题?

谢谢!

【问题讨论】:

    标签: c# asp.net-mvc wcf


    【解决方案1】:

    您需要确保拥有从服务主机(.svc 文件)引用的所有所需文件,即:

    <@% ServiceHost Service="..."/>
    

    Service 指定服务实现的地方。 服务契约(服务实现实现的接口)通常在web.config中配置。

    如果服务主机文件位于解决方案的根目录,则无需忽略路由。

    您需要引用 System.ServiceModel。

    如果你想测试你的服务,你可以打开 Visual Studio 命令提示符并运行 wcftestclient,File -> Add service 并为你的服务添加 url,例如:

    http://locahost:12423/MyService.svc
    

    【讨论】:

    • 我有“System.ServiceModel”的参考=)而且我也有服务实现(服务也使用MVC使用的库)接口也在那里=/
    • 确保调用了正确的 http 处理程序。它应该是处理 .svc 文件扩展名的那个。这基本上与说您应该确保您的忽略路由正常工作相同。如果有任何帮助,您可以检查 IIS 中正在调用哪个处理程序:serverfault.com/questions/350318/…
    • 也许更安全的 IgnoreRoute 是:{*url}.svc。 * 表示忽略“/”。见stackoverflow.com/questions/3156204/…。路线的顺序也很重要,因此请确保将其放在第一位
    • "routes.IgnoreRoute("{*url}.svc");"也没有工作(这是第一个)=,(我迷路了哈哈哈...谢谢@Rui的文章...至少我在学习=D
    • 打开 Visual Studio 命令提示符并输入 wcftestclient,添加 svc 文件的 url(文件 -> 添加服务)。然后您可以测试服务
    【解决方案2】:

    我已经有一段时间没有玩这个了,但我认为在使用 MVC 时你需要注册一个 service route... 但我不记得那是不是我拥有这样做,或者我只是想为更清洁的路线这样做。

    要使用服务路由添加服务,您可以执行以下操作

    routes.Add("MyService", new ServiceRoute(
        "some/path",
        new ServiceHostFactory(),
        typeof(MyService)
    ));
    

    【讨论】:

    • 这样就不需要 .svc 文件了
    • 嗯,听起来不错,我已经有一段时间没有玩 WCF了
    • 是的.. 我不想消除 .svc 文件 =/ ...实际上我想要两种可能性.. 使用 SOAP 和 HTTP =)
    • 我必须为 .svc 文件添加路由吗?
    • @BrenoRiba 该路由可以代表 .svc 文件,因此您不需要它。服务文件只是为 asp.net 提供信息,例如服务类型和其他信息,这也是服务路由的作用。它还允许您随意放置路由,而不是放置 .svc 文件的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多