我创建了一个返回类型为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);
}
}
我得到的结果完全符合我的预期。但我怎样才能保持相同的班级名称?
答案 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);
}