내 서비스가 다른 방법으로 작동하지만 더 복잡한 컬렉션으로 메소드를 호출하려고하면 서비스 추적 뷰어에서 오류가 발생합니다.WCF 오류 '매개 변수를 직렬화하는 동안 오류가 발생했습니다.'
'http://tempuri.org/:GetDataEventSetResult 매개 변수를 직렬화하는 동안 오류가 발생했습니다. InnerException 메시지가 '데이터 입력 이름이'DAInt : http://schemas.datacontract.org/2004/07/MimosaServerLib '인'MimosaServerLib.DAInt '형식이 아닙니다 ...'
동일한 오류가있는 질문에 대한 답은 클래스 정의를 변경하여 'ProxyCreationEnabled'를 해제했지만 내가 사용하고있는 클래스 (DataEventSet
, DAInt
)는 xsd 도구를 사용하여 자동 생성 된 파일에서 가져온 것입니다. 즉, 나는 그것을 바꿔서는 안된다.
DataEventSet
개체를 만들 :
private DataEventSet CreateDataEventSet()
{
DataEventSet aDataEventSet = new DataEventSet();
DataEvent[] dataEvents = new DataEvent[2];
DAInt aDAInt = new DAInt();
aDAInt.id = 100100100;
aDAInt.value = 1;
dataEvents[0] = aDAInt;
DADataSeq aDADataSeq = new DADataSeq();
aDADataSeq.id = 200100100;
double[] vals = new double[2];
vals[0] = 5;
vals[1] = 44;
aDADataSeq.values = vals;
double[] vals2 = new double[2];
vals2[0] = 1;
vals2[1] = 1;
aDADataSeq.xAxisDeltas = vals2;
aDADataSeq.xAxisStart = 0;
dataEvents[1] = aDADataSeq;
aDataEventSet.id = 0;
Site aSite = new Site();
aSite.category = SITE_CATEGORY.SITE_SPECIFIC;
aDataEventSet.site = aSite;
OsacbmTime aTime = new OsacbmTime();
aTime.tick_time = 12313246;
aTime.time = "2007-09-20T14:46:04.123";
aTime.time_type = OsacbmTimeType.OSACBM_TIME_MIMOSA;
aDataEventSet.time = aTime;
aDataEventSet.dataEvents = dataEvents;
return aDataEventSet;
}
편집을 다음 DataEventSet
//This source code was auto-generated by xsd
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.mimosa.org/OSACBMV3-1l")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.mimosa.org/OSACBMV3-1l", IsNullable=false)]
public partial class DataEventSet {
private bool alertStatusField;
private bool alertStatusFieldSpecified;
private DataEvent[] dataEventsField;
private ulong idField;
private Site siteField;
private OsacbmTime timeField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public bool alertStatus {
get {
return this.alertStatusField;
}
set {
this.alertStatusField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool alertStatusSpecified {
get {
return this.alertStatusFieldSpecified;
}
set {
this.alertStatusFieldSpecified = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("dataEvents", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public DataEvent[] dataEvents {
get {
return this.dataEventsField;
}
set {
this.dataEventsField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public ulong id {
get {
return this.idField;
}
set {
this.idField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public Site site {
get {
return this.siteField;
}
set {
this.siteField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public OsacbmTime time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
}
감사합니다. 이제 WCF 테스트 클라이언트에서 작동합니다. 그러나 외부 클라이언트를 사용하여 서비스에 액세스하려고하면 'NetDispatcherFaultException'이 발생합니다 : "http://tempuri.org/:GetDataEventSetResult. InnerException 메시지가 '라인 1 위치 898 오류입니다.'요소 'http : // schemas .datacontract.org/2004/07/MimosaServerLib : DataEvent '이름에 매핑되는 유형의 데이터가 포함되어 있습니다.' – Jimmy
해결 : 서비스 참조 설명서를 업데이트해야합니다. – Jimmy
KnownType() 속성을 사용 했습니까? –