【发布时间】:2023-03-23 01:50:02
【问题描述】:
我在使用 WCF 中的命名空间时遇到问题。我以前从来没有做过。我已经尝试了很多在谷歌上找到解决方案。但我仍然无法找到解决方案。
我编写了一个 WCF 服务,它分为 3 个项目,另外我还创建了一个模型项目:
- 合同 (ServiceContract)
- 服务(代码隐藏)
- 主机(服务主机)
- 模型(DataContract 类)
当我在 IIS 中托管服务时,它可以正常生成 WSDL,但有些命名空间我没有定义如下:
http://schemas.microsoft.com/2003/10/Serialization/
http://schemas.datacontract.org/2004/07/My.Models
问题是我只想通过同一个命名空间访问我所有的服务合同和数据合同。
因为在代理类中生成DataContract 类时,它正在被复制。意思是如果我在我的Models 项目中有一个类ClassA,那么它会给我两个类ClassA 和ClassA1。
我在代理类中看到它们位于不同的命名空间中。所以,我想避免这种情况。
我也想避免ChannelFactory方法,因为有很多OperationContract函数。所以,不想手动编写那么多代码,但希望它以正确的方式自动生成。
非常感谢任何帮助。提前致谢。
【问题讨论】:
-
我不明白你对
ChannelFactory方法和大量手工编码的意思。ChannelFactory将为您生成代理 - 除了创建工厂并从中获取通道之外,无需手动编码。 -
是的 - 服务器端服务对象的命名空间和客户端代理生成的对象,通常是不同的 - 除非你知道您控制服务调用的两端(服务器 + 客户端),并且您可以将数据协定放入服务器和客户端都引用的单独的程序集。在这种情况下,数据类在您的数据协定程序集中仅存在一次。
-
你是否为你的合约/服务定义了命名空间?
-
因为在代理类中生成 DataContract 类时,它正在被复制。意思是,如果我的模型项目中有一个 ClassA 类,那么它会给我 2 个类,分别是 ClassA 和 ClassA1。 - 你能在发生这种情况的地方发布代码吗?