gpt4 book ai didi

c# 在 WCF 方法中传递结构

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:25 25 4
gpt4 key购买 nike

我想通过 WCF 服务将一个类传递给客户端。在那堂课中,我使用了一个结构。但是我在客户端收到的值是:“System.Data.DataSet”一定是我不明白的地方。查看我的结构(现在只是一个字符串)

namespace spine.datatypes
{
[Serializable]
public struct Tanga : IXmlSerializable
{
private string _value;


public Tanga(string value)
{
this._value = value;
}

public static implicit operator Tanga(string value)
{
return new Tanga(value);
}

public override string ToString()
{
return this._value;
}

// implement IXmlSerializable
public XmlSchema GetSchema() { return null; }
public void ReadXml(XmlReader reader)
{
_value = reader.ReadContentAsString();
}

public void WriteXml(XmlWriter writer)
{
writer.WriteValue(this._value.ToString());
}
}

这是我的服务:

namespace webapplication.WCFservice.Recorder
{

[ServiceContract]
[XmlSerializerFormat]
public interface IWCFRecorder
{
[OperationContract]
TvRecorder getDedicatedJob(String recordername, String recorderip);
}
}

这是我通过的类(class):

namespace spine.recorder.tv
{

[Serializable()]
[XmlRoot("Recorder")]
public class TvRecorder
{
public int id { get; set; }
public Tanga name { get; set; }
public MyIpAddress ip { get; set; }
public int channel { get; set; }
public MyTimecode time_start { get; set; }
public MyTimecode duration { get; set; }

public TvRecorder() { }

public TvRecorder(int _id, Tanga _name, MyIpAddress _ip, int _channel, MyTimecode _time_start, MyTimecode _duration)
{
this.id = _id;
this.name = _name;
this.ip = _ip;
this.channel = _channel;
this.time_start = _time_start;
this.duration = _duration;
}

}
}

最佳答案

不幸的是,在某些情况下,svcutil 会为相同的架构类型生成 DataContract 类型和 XmlSerializer 类型。我建议您尝试使用额外的“/serializer:XmlSerializer/useSerializerForFaults”切换到 svcutil,看看是否能解决您的问题。它应该确保生成 Tanga。

一般来说,对于生成 DataContract 类型的模式导入,模式中定义的所有类型都必须包含在 DCS 支持的 XSD 子集中,您可以在此处找到:

http://msdn.microsoft.com/en-us/library/ms733112.aspx

如果在您指定“/serializer:DataContractSerializer”时 svcutil 无法生成代理,那么最可能的解释是架构不符合 DC。使用 svcutil 时是否看到任何其他错误或警告?

在公共(public) Web 服务中使用数据集(类型化和非类型化)和 IXmlSerializables 通常也是不好的做法。在这种情况下,导入这些似乎有困难。这是一个快速链接,由于其他一些原因可能会出现问题:http://www.hanselman.com/blog/PermaLink,guid,d88f7539-10d8-4697-8c6e-1badb08bb3f5.aspx

虽然 DataContractSerializer 可以序列化 IXmlSerializable 类型,但完全不能保证 IXmlSerializable 类型可以作为数据协定导入。这是两个不同的概念。 IXmlSerializable 类型可以自由提供它们自己的模式,因此它们可以提供不符合数据契约(Contract)的模式,从而导致 svcutil 回退到 XmlSerializer 类型生成。

希望这对您有所帮助。

关于c# 在 WCF 方法中传递结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581532/

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