【问题标题】:Removing Extra WCF namespace from WSDL从 WSDL 中删除额外的 WCF 命名空间
【发布时间】:2023-03-23 01:50:02
【问题描述】:

我在使用 WCF 中的命名空间时遇到问题。我以前从来没有做过。我已经尝试了很多在谷歌上找到解决方案。但我仍然无法找到解决方案。

我编写了一个 WCF 服务,它分为 3 个项目,另外我还创建了一个模型项目:

  1. 合同 (ServiceContract)
  2. 服务(代码隐藏)
  3. 主机(服务主机)
  4. 模型(DataContract 类)

当我在 IIS 中托管服务时,它可以正常生成 WSDL,但有些命名空间我没有定义如下:

http://schemas.microsoft.com/2003/10/Serialization/
http://schemas.datacontract.org/2004/07/My.Models

问题是我只想通过同一个命名空间访问我所有的服务合同和数据合同。

因为在代理类中生成DataContract 类时,它正在被复制。意思是如果我在我的Models 项目中有一个类ClassA,那么它会给我两个类ClassAClassA1

我在代理类中看到它们位于不同的命名空间中。所以,我想避免这种情况。

我也想避免ChannelFactory方法,因为有很多OperationContract函数。所以,不想手动编写那么多代码,但希望它以正确的方式自动生成。

非常感谢任何帮助。提前致谢。

【问题讨论】:

  • 我不明白你对ChannelFactory 方法和大量手工编码的意思。 ChannelFactory 将为您生成代理 - 除了创建工厂并从中获取通道之外,无需手动编码。
  • 是的 - 服务器端服务对象的命名空间和客户端代理生成的对象,通常不同的 - 除非你知道您控制服务调用的两端(服务器 + 客户端),并且您可以将数据协定放入服务器和客户端都引用的单独的程序集。在这种情况下,数据类在您的数据协定程序集中仅存在一次
  • 你是否为你的合约/服务定义了命名空间?
  • 因为在代理类中生成 DataContract 类时,它正在被复制。意思是,如果我的模型项目中有一个 ClassA 类,那么它会给我 2 个类,分别是 ClassA 和 ClassA1。 - 你能在发生这种情况的地方发布代码吗?

标签: c# wcf wsdl


【解决方案1】:

我也想避免 ChannelFactory 方法,因为有很多 OperationContract 函数。所以,不想编码那么多 手,但希望它以正确的方式自动生成。

这根本没有意义。 ChannelFactory<T>.CreateInstance() 方法比 wsdl 生成的服务代理要轻得多,而且您必须编写的代码量是相当的。

服务参考专为您调用无法控制或内部可见性的第三方服务而设计。

如果您有权访问服务定义程序集,那么我绝对没有想到使用生成的服务引用比使用 ChannelFactory 更可取的情况。

尤其是您需要操纵服务 wsdl 以控制客户端的代码生成的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多