创建WCF代理时类名更改

时间:2014-12-24 12:36:38

标签: .net wcf

我创建了一个返回类型为JsonOutput<List<InstallerRequestModel>>的WCF服务。我的JsonOutput是一个接受任何类型

的泛型类
   public class JsonOutput<T> where T : new()
    {
        public string Status { get; set; }
        public T Result { get; set; }
    }

服务端点

  [OperationContract]
        JsonOutput<List<InstallerRequestModel>> GetInstallerRequests(string requestType);

安装程序请求模型

 public class InstallerRequestModel
    {
       [Key]
       public int Id { get; set; }
       public string Project { get; set; }
       public string ProductVersion { get; set; }
       public string ProductType { get; set; }
       public string PackageType { get; set; }
       public string NeedOfInstaller { get; set; }
       public string Label { get; set; }
       public DateTime? DueDate { get; set; }
       public string ResourceName { get; set; }
       public string RequestedBy { get; set; }
       public string BuildEngineer { get; set; }
       public string BuildPath { get; set; }
       public DateTime StartDate { get; set; }
       public DateTime EndDate { get; set; }
       public string BuildStatus { get; set; }
       public string ApprovedBy { get; set; }
       public string CreatedBy { get; set; }
       public string ModifiedBy { get; set; }

    }

代理JsonOutput<List<InstallerRequestModel>>创建后的问题更改为JsonOutputOfArrayOfInstallerRequestModelohl1y18V

 public JsonOutputOfArrayOfInstallerRequestModelohl1y18V GetInstallerRequests(string requestType)
        {
            using (var buildPortalServiceClient = new BuildPortalServiceClient())
            {
                return buildPortalServiceClient.GetInstallerRequests(requestType);
            }
        }

我得到的结果完全符合我的预期。但我怎样才能保持相同的班级名称?

1 个答案:

答案 0 :(得分:1)

这样做的方法是与客户项目共享服务合同和数据合同类。

我从&#34; WCF服务库&#34;创建了一个新项目。 Visual Studio中的模板。我已将JsonOutput<T>InstallerRequestModel类添加到其中,并将您的操作合同添加到IService1服务合同中。我在GetInstallerRequests类中实现了一个虚拟Service1操作,以便它仍然可以构建。

我参加了一个我曾经坐过的Web应用程序项目,并将WCF服务库添加到它作为参考(注意:不是服务引用)。这使该项目可以访问实际服务合同中使用的实际类型。在托管并启动主机的WCF服务库项目之后,我能够向Web应用程序添加服务引用。我使用了&#34; Advanced&#34;按钮并确保&#34;重复使用引用的程序集中的类型&#34;被检查了。我确认引用的库是其中一个程序集。然后我单击“确定”两次,Visual Studio创建了代理类。

这是它生成的方法之一。您可以看到它引用了正确的类型:

public WcfServiceLibrary1.JsonOutput<System.Collections.Generic.List<WcfServiceLibrary1.InstallerRequestModel>>
    GetInstallerRequests(string requestType) {
        return base.Channel.GetInstallerRequests(requestType);
}