ServiceRoute + WebServiceHostFactory 杀死 WSDL 生成?如何使用 ?wsdl 创建无扩展的 WCF 服务

2024-04-18

我正在尝试使用无扩展名/无 .svc WCF 服务。其他人可以确认或否认我遇到的问题吗?

我在代码中使用路由,并在 global.asax.cs 的 Application_Start 中执行此操作:

RouteTable.Routes.Add(new ServiceRoute("Data", new WebServiceHostFactory(), typeof(DataDips)));

我已经在 IIS 6 和 IIS 7.5 中进行了测试,并且可以很好地使用该服务(即我的无扩展通配符映射处理程序配置正确指向 ASP.NET)。然而,元数据生成完全搞砸了。我can使用 WCF 测试客户端(我认为是 svcutil.exe)命中我的 /mex 端点 - 但通常使用 .svc 获得的 ?wsdl 生成是吐司。我无法使用浏览器访问它(收到 400 错误请求),也无法使用 wsdl.exe 等访问它。元数据生成在 web.config 中正确配置。

这当然是一个问题,因为该服务被公开为 basicHttpBinding,以便旧式 ASMX 客户端可以访问它。当然,如果没有 WSDL 描述,客户端就无法生成代理。

如果我像这样在配置中使用 serviceActivation 路由,而不是在代码中注册路由:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
  <serviceActivations>
    <add relativeAddress="Data.svc" service="DataDips" />
  </serviceActivations>
</serviceHostingEnvironment>

然后瞧...它起作用了。

但我没有一个干净的无扩展网址。如果我将相对地址从 Data.svc 更改为 Data,则会出现配置异常,因为配置不支持此操作。 (必须使用注册到 WCF 的扩展)。

我还尝试将此代码与上述配置结合使用:

RouteTable.Routes.MapPageRoute("","Data/{*data}","~/Data.svc/{*data}",false);

我的想法是,我可以将无扩展名的 url 指向配置的 .svc url。这不起作用 - /Data.svc 继续工作,但 /Data 返回 404。

如果在像这样的配置中使用 urlMappings 并与上面的 serviceActivation 结合使用,我确实找到了解决方法:

<urlMappings>
   <add url="~/Data" mappedUrl="Data.svc"/>
</urlMappings>

这样做的问题是双重的—— 1. 看起来很复杂 2. 在生成的 WSDL 中,操作端点仍然引用 Data.svc/,而不是 Data/——因此依赖于实际存在/响应的 Data.svc。

这并不是我真正想要的,即使它有点/某种程度上解决了问题。

是否有正确的方法来获取无扩展名的 WCF 服务 URL 以正确生成 WSDL?


哇,我是不是觉得自己很蠢。

我应该使用 ServiceHostFactory 托管我的服务,而不是 WebServiceHostFactory。

当我从 config... 移回代码并切换到这行代码时:

RouteTable.Routes.Add(new ServiceRoute("Data", new ServiceHostFactory(), typeof(DataDips)));

我正在处理一个提供 WSDL 和帮助页面的无扩展 URL。

很遗憾我在这上面浪费了很多时间。我使用 WebServiceHostFactory 是一个意外,但 MSDN 中的工厂页面上没有关于功能减少的免责声明。 (我认为删除 WSDL 是有意义的,但删除帮助页面则不然,因为它们可以简单地在配置中提供一个属性来重命名“帮助”页面(如果存在具有该名称的 REST 操作……叹息)。

WebServiceHost 文档中有一条注释http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webservicehost.aspx http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webservicehost.aspx

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

ServiceRoute + WebServiceHostFactory 杀死 WSDL 生成?如何使用 ?wsdl 创建无扩展的 WCF 服务 的相关文章

  • 如何在Windows窗体代码后面编写方法的单元测试

    我有想要测试的方法 但收到此错误 在创建窗口句柄之前无法在控件上调用 Invoke 或 BeginInvoke 现在我还有一个列表框 正在我正在测试的函数中填充 因此 当我将方法分离到另一个类时 这是一个问题 我理解这一点 因为表单需要首先
  • 在Windows应用程序中创建一个文本文件

    我想打开一个文本文件并向该文件写入一些数据 这是我的代码 FileStream fs1 new FileStream D Yourfile txt FileMode OpenOrCreate FileAccess Write StreamW
  • 棒棒糖中的 takePicture 失败

    以下代码正在使用 可在后台拍照 它对于棒棒糖以下的所有版本都工作正常 但在以下版本中给出运行时异常takePicture null null mcall 有任何想法吗 public void takePictures final int d
  • 如何将 DataTable/DataSet 转换为 ObjectDataSource

    我有一个与 ObjectDataSource 绑定的 GridView 我有一个返回数据表的方法 如何将 DataTable 提供给 ObjectDataSource 以便在代码中更新 GridView Example protected
  • WCF WebGetAttribute 与 WebInvokeAttribute

    WebGetAttribute 只是 Method GET 的 WebInvokeAttribute 的语法糖吗 或者有根本的区别吗 您立即观察到 WebGet 和 WebInvoke 非常相似 这与事实相差不远 正如您已经说过的 WebG
  • 调用 new SqlConnection() 会挂起程序

    这个把我难住了 我什至没有尝试连接到数据库 当这段代码到达我实例化一个新的 SqlConnection 对象的行时 它只是挂在那里 不会抛出异常或任何东西 我已经尝试将其编译为2 0 3 5和4 0 它们都挂了 当然 它也适用于我的机器和你
  • 动态加载组件 - 设置和通信

    好吧 我有一个 WPF 应用程序 我们称之为Launcher exe 它加载并执行另一个 WPF 应用程序 我们称之为Loaded exe 动态地使用这样的东西 Byte assemblyData using BinaryReader re
  • WebBrowser 控件和 JavaScript 错误

    当我使用浏览器 ie9 访问该页面时 浏览器渲染正常 当我使用 WebBrowser 控件时 出现 JavaScript 错误 我知道我可以抑制脚本错误 但我希望它们正确运行 因为它们会影响页面的渲染和功能 我怎么解决这个问题 我可以将 I
  • 检测活动 RDP 会话

    我需要在我的应用程序中实现死人开关 如果应用程序从 RDP 运行 我需要在它失去与远程客户端的连接时采取行动 我知道当我在 RDP 中运行时使用 GetSystemMetrics SystemMetric SM REMOTESESSION
  • 限制文本框中每行的最大字符数

    假设我有以下内容
  • MVVM 中的事件而不是命令?

    在MVVM的各种教程中经常会指出 MVVM的目标不是消除代码隐藏 并且代码隐藏中的一些事件处理可能仍然是必要的 在什么场景下您需要在代码隐藏中编写事件而不是在视图模型中使用命令 一般来说 如果您的代码与 UI 逻辑相关 请将其保留在视图的
  • 自动化 Windows UI 测试方法

    我们正在寻求设置自动化 UI 测试 并想知道最好的方法是什么 潜在的陷阱是什么 设置费用是否昂贵 提前致谢 B 自动化测试最大的消耗可能是时间 有很多非常昂贵的工具 但也有免费的工具 即使是昂贵的工具的成本也不太可能与正确设置自动化测试所需
  • 如何以编程方式重新启动 Windows 资源管理器进程

    我正在开发 Windows shell 扩展 不幸的是 在更改 DLL 时 我必须重新启动 Windows 资源管理器 因为它将 DLL 保留在内存中 我从 Dino Esposito 找到了这个程序 但它对我不起作用 void SHShe
  • 我应该将一个任务包装在另一个任务中还是应该返回创建的任务?

    我正在构建一个使用 ADO NET 的 NET 4 0 应用程序 因此我无法使用 async await 我不想要一个解决方案 但我确实想知道以下哪种实现是最好的以及为什么 我的单元测试通过了所有三个实现 但我想知道这三个之间的区别 1 嵌
  • 如何从网络客户端获取状态码?

    我正在使用WebClient类将一些数据发布到 Web 表单 我想获取表单提交的响应状态代码 到目前为止我已经找到了如果出现异常如何获取状态代码 Catch wex As WebException If TypeOf wex Respons
  • 如何在单独的文件(不是 .csproj 或 app.config)中定义条件编译符号

    我们需要在类库项目中定义一个条件编译符号 不应在源代码管理中检查这一点 它不适用于所有开发人员 因此应在除 csproj or the 应用程序配置文件 如何才能实现这一目标 我会在配置管理器中定义您的各种构建类型 菜单Build 配置管理
  • 无法在 web.config 中为 WCF Web 服务设置服务名称属性

    我编写了一个运行良好的 WCF Web 服务 然后我从另一个应用程序复制了该 Web 服务的内容 并创建了一个新的 WCF 文件 该文件在 web config 中创建了一个新文件 但名称属性显示找不到命名空间 以下是我的 WCF 前几行的
  • Random 并行生成数字 1 的次数超过 90% [重复]

    这个问题在这里已经有答案了 考虑以下程序 public class Program private static Random rnd new Random private static readonly int ITERATIONS 50
  • 在 10 亿次迭代中获得相同 GUID 的机会有多大?

    我正在开展一个项目 需要生成大约 10 亿个 GUID 我知道 GUID 不能保证是唯一的 但几乎始终是唯一的 如果我生成了十亿个 GUID 那么匹配的概率是多少 博客文章 GUID 是全局唯一的 但 GUID 的子字符串不是 https
  • 使用 List.Sort(Comparison Comparison 在 C# 中对列表进行排序

    我创建了一个类 如下所示 public class StringMatch public int line num public int num of words 我创建了一个列表 List

随机推荐