![](/img/trans.png)
[英]Is passing a struct value to a method by-reference in C# an acceptable optimization?
[英]c# Passing a struct in a WCF method
我想通過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);
}
}
這是我通過的課程:
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時,是否還看到其他錯誤或警告?
在公共Web服務中使用數據集(類型化和非類型化)和IXmlSerializables通常也是一種不好的做法。 在這種情況下,似乎很難導入這些文件。 這是一個由於其他原因而可能導致問題的快速鏈接: http : //www.hanselman.com/blog/PermaLink,guid,d88f7539-10d8-4697-8c6e-1badb08bb3f5.aspx
盡管DataContractSerializer可以序列化IXmlSerializable類型,但完全不能保證IXmlSerializable類型可以作為數據協定導入。 那是兩個不同的概念。 IXmlSerializable類型可以自由提供自己的模式,因此它們有可能提供不符合數據合同的模式,從而導致svcutil退回到XmlSerializer類型生成。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.