.net 创建WCF代理时更改类名
我创建了一个WCF服务,它返回类型为.net 创建WCF代理时更改类名,.net,wcf,.net,Wcf,我创建了一个WCF服务,它返回类型为JsonOutput。我的JsonOutput是一个接受任何类型的泛型类 public class JsonOutput<T> where T : new() { public string Status { get; set; } public T Result { get; set; } } 通过代理创建后的问题JsonOutput更改为jsonoutputofArrayFinStalle
JsonOutput
。我的JsonOutput是一个接受任何类型的泛型类
public class JsonOutput<T> where T : new()
{
public string Status { get; set; }
public T Result { get; set; }
}
通过代理创建后的问题JsonOutput
更改为jsonoutputofArrayFinStallerRequestModelOHL18V
public JsonOutputOfArrayOfInstallerRequestModelohl1y18V GetInstallerRequests(string requestType)
{
using (var buildPortalServiceClient = new BuildPortalServiceClient())
{
return buildPortalServiceClient.GetInstallerRequests(requestType);
}
}
我得到的结果正是我所期望的。但是我如何保持相同的类名呢?方法是与客户端项目共享您的服务合同和数据合同类 我从VisualStudio中的“WCF服务库”模板创建了一个新项目。我将您的
JsonOutput
和InstallerRequestModel
类添加到它中,并将您的操作契约添加到IService1
服务契约中。我在Service1
类中实现了一个伪GetInstallerRequests
操作,这样它仍然可以构建
我拿了一个坐在旁边的web应用程序项目,并将WCF服务库添加到其中作为参考(注意:不是服务参考)。这使该项目能够访问实际服务合同中使用的实际类型。在托管WCF服务库项目并启动主机之后,我能够向web应用程序添加服务引用。我使用了“高级”按钮并确保选中了“在引用的程序集中重用类型”。我确认引用的库是这些程序集之一。然后我两次单击OK,VisualStudio创建了代理类
下面是它生成的方法之一。您可以看到它引用了正确的类型:
public WcfServiceLibrary1.JsonOutput<System.Collections.Generic.List<WcfServiceLibrary1.InstallerRequestModel>>
GetInstallerRequests(string requestType) {
return base.Channel.GetInstallerRequests(requestType);
}
public WcfServiceLibrary1.JsonOutput
GetInstallerRequests(字符串请求类型){
返回base.Channel.GetInstallerRequests(requestType);
}
使用System.Collections.Generic.List
进行集合并重用引用程序集中的类型。我在创建代理时已经选择了System.Collections.Generic.List。但问题仍然存在。我在“集合类型”下拉列表中没有类型列表的选项。只有类型列表我认为问题是由于JsonOutput classWCF造成的交换XML格式的消息,并且要将类型序列化到XMK,它必须是已知类型,这不适用于泛型类型。。
public JsonOutputOfArrayOfInstallerRequestModelohl1y18V GetInstallerRequests(string requestType)
{
using (var buildPortalServiceClient = new BuildPortalServiceClient())
{
return buildPortalServiceClient.GetInstallerRequests(requestType);
}
}
public WcfServiceLibrary1.JsonOutput<System.Collections.Generic.List<WcfServiceLibrary1.InstallerRequestModel>>
GetInstallerRequests(string requestType) {
return base.Channel.GetInstallerRequests(requestType);
}