gpt4 book ai didi

c# - 通过 WCF 提供类对象数组或列表

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:54 24 4
gpt4 key购买 nike

任何提供自定义类对象列表或数组的 WCF 客户端服务器示例都会对我有帮助!但这是我目前所获得的:

这是我要提供的类系统

namespace NEN_Server.FS {
[Serializable()]
public class XFS {
private List<NFS> files;
public XFS() {
files = new List<NFS>();
}
public List<NFS> Files {
get { return files; }
set { files = value; }
}
}
}

NFS 在哪里

namespace NEN_FS {
public interface INFS : IEquatable<NFS> {
string Path { get; set; }
}
[Serializable()]
abstract public class NFS : INFS {
abstract public string Path { get; set; }
public NFS() {
Path = "";
}
public NFS(string path) {
Path = path;
}
public override bool Equals(object obj) {
NFS other = obj as NFS;
return (other != null) && ((IEquatable<NFS>)this).Equals(other);
}
bool IEquatable<NFS>.Equals(NFS other) {
return Path.Equals(other.Path);
}
public override int GetHashCode() {
return Path != null ? Path.GetHashCode() : base.GetHashCode();
}
}
}

提供方法是:

namespace NEN_Server.WCF {
public class NEN : INEN {
private MMF mmf;
public NEN() {
mmf = new MMF();
}
public string GetRandomCustomerName() {
return mmf.MMFS.Files[0].Path;
}
public NFS[] ls() {
return mmf.MMFS.Files.ToArray();
}

界面是

<ServiceContract>
Public Interface INEN
<OperationContract>
Function GetRandomCustomerName() As String
<OperationContract()>
Function ls() As NFS()

最后我做了:

%svcutil% /language:cs /out:NEN_Protocol\NEN.cs http://localhost:8080/NEN_Server

它产生:

public NEN_FS.NFS[] ls()
{
return base.Channel.ls();
}

我在我的客户端应用程序中调用它 let files = nen.ls() 并且它失败了:

An unhandled exception of type 'System.ServiceModel.CommunicationException' occurred in mscorlib.dll

Additional information: The underlying connection was closed: The connection was closed unexpectedly.

return base.Channel.ls(); 代码行上。

注意提供字符串 mmf.MMFS.Files[0].Path; 工作正常

为什么?我究竟做错了什么? :)

所有代码都可以在 GitHub 上找到:https://github.com/nCdy/NENFS

最佳答案

在我看来,故障原因在这里:abstract public class NFS
首先,考虑使用 data contracts使用 WCF:

[DataContract(IsReference = true)]
abstract public class NFS : INFS
{
[DataMember]
abstract public string Path { get; set; }

// the rest of code here
}

第二个,指定known types为您的数据契约(Contract)。通信 channel 两侧的序列化程序必须知道如何序列化/反序列化具体的 NFS' 后代类型:

[DataContract(IsReference = true)]
[KnownType(typeof(NFS1))]
[KnownType(typeof(NFS2))]
abstract public class NFS : INFS
{
[DataMember]
abstract public string Path { get; set; }

// the rest of code here
}

public class NFS1 : NFS {}
public class NFS2 : NFS {}

关于c# - 通过 WCF 提供类对象数组或列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12052962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com