.net 创建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

我创建了一个WCF服务,它返回类型为
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);
}