我正在處理服務器客戶端應用程序。通信是使用webservice webmethods完成的。服務器和客戶端都是用C#編寫的。我已經與它戰鬥了幾天,但我無法解決它。在C中使用SOAP通過web服務傳遞對象#
我有問題通過webservice發送複雜的類 - 我到目前爲止嘗試了很多東西,但都沒有工作。
每一個的WebMethod返回ServiceResult類,看起來像這樣:
public class ServiceResult
{
public ResultStatus Status;
public object ResultObject;
public ServiceResult(ResultStatus status, object resultObject)
{
Status = status;
ResultObject = resultObject;
}
}
ResultStatus是枚舉,ResultObject是實際返回的值。當我嘗試通過webservice發送複雜類時,問題就出現了。
例如,我有抽象類Job,它具有私有元素。
public abstract class Job : IComparable<Job>
{
public static readonly int DefaultDelay = 5000;
private int _jobID;
private int _referringID;
private JobType _jobType;
protected JobState _jobState;
private JobPriority _jobPriority;
[...]
}
但是,當我嘗試發送類繼承Job類(我們稱之爲JobA)通過webmethod我有錯誤。因爲我有任何的WebMethod沒有明確職吧返回類型,當我把我的webmethod我得到一個錯誤:
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type Job[] may not be used in this context.
這是關於第一個錯誤。現在有不同的類,其中的錯誤看起來是這樣的(再次,調用一個WebMethod時)另外一個問題:
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
當我添加[SoapInclude(typeof運算(MyClass的))]有沒有什麼區別,但使用XmlInclude而是使我的ServiceResult.ResultObject數組的XmlNodes。
我認爲這兩個問題都是關於序列化的,但我不知道如何解決它們。基本上,我的問題是:我應該如何通過webmethod以這種方式將自定義對象從服務器傳遞到客戶端,以便我可以將它們用作對象(我想將此ServiceResult.ResultObject強制轉換爲類,並將其用作類的臨時實例那個班)?什麼是最好的方式來做到這一點?
任何人都可以提出任何解決方案嗎?
你堅持使用.NET 2.0?如果不是,那麼你不應該使用傳統的ASMX網絡服務。你應該使用WCF進行所有新的開發。 –
嗯,我認爲這會更容易,因爲我還沒有使用WCF。但似乎可能會更快。 – msu
「更容易」,是的,因爲它功能少得多,可擴展性也少得多。一個好主意,不,因爲它沒有未來,甚至沒有任何錯誤修復。 –