在不影响客户端的情况下更改WCF项目的命名空间

本文关键字:WCF 项目 命名空间 情况下 影响 客户端 | 更新日期: 2023-09-27 18:20:40

我们创建并部署了一个WCF服务,该服务正被各种第三方使用。

然而,我们现在想要更改该特定项目中类的名称空间。有没有办法在第三方不必做出任何改变的情况下做到这一点?

示例:

namespace Test.Service 
{
    [ServiceContract]
    public interface MyService 
    { 
         [OperationContract]
         List<People> GetPeople();
    }
    public class MyService : IMyService 
    {
         public List<People> GetPeople() 
         {
            // Logic here
         }
    }
}
namespace Test.Service.DTO 
{
    [DataContract]
    public class Person { }
}

namespace Something.Different
{
    [ServiceContract]
    public interface MyService 
    { 
         [OperationContract]
         List<People> GetPeople();
    }
    public class MyService : IMyService 
    {
         public List<People> GetPeople() 
         {
            // Logic here
         }
    }
}
namespace Something.Different.DTO 
{
    [DataContract]
    public class Person { }
}

实际上,这似乎是一个主要与WDSL中生成的DTO的名称空间有关的问题。

他们正在改为

http://schemas.datacontract.org/2004/07/Something.Different.DTO 

来自

http://schemas.datacontract.org/2004/07/Test.Service.DTO 

这似乎导致调用的结果(不会出错)没有反序列化,因此列表最终为空。

在不影响客户端的情况下更改WCF项目的命名空间

只要在服务内部进行所有重构,就不会有任何问题,前提是:

  • 您只与第三方共享WSDL
  • 换句话说:您没有向第三方提供包含接口和[DataContract]类的共享库

问候