我正在使用ASP.NET C#創建一個Web服務。我從web服務發送各種數據類型,所以我使用以下結構。C#.NET WebService返回對象
public enum WS_ServiceResponseResult
{
Success,
Failure,
}
public class WS_ServiceResponse
{
public WS_ServiceResponseResult result { get; set; }
public object data { get; set; }
}
public class WS_User
{
public long id{ get; set; }
public string name{ get; set; }
}
Webservice的抽樣方法
[WebMethod(EnableSession = true)]
public WS_ServiceResponse LogIn(string username, string pasword)
{
WS_ServiceResponse osr = new WS_ServiceResponse();
long userID = UserController.checkLogin(username, pasword);
if (userID != 0)
{
osr.result = WS_ServiceResponseResult.Success;
osr.data = new WS_User() { id = userID, name = username };
}
else
{
osr.result = WS_ServiceResponseResult.Failure;
osr.data = "Invalid username/password!";
}
return osr;
}
我使用兩種類型的客戶端,JavaScript和C#.NET Windows窗體。當我從javascript調用時,我沒有問題,並且osr.data被WS_User填充。所以我可以很容易地使用osr.data.id。但是,當我從C#.NET中使用我可以成功調用,但是當結果到達時,我得到一個SOAP異常
{System.Web.Services.Protocols.SoapException(使用「添加Web引用」生成代理): System.Web.Services.Protocols.SoapException: 服務器無法處理請求。 ---> System.InvalidOperationException:生成XML 文檔時發生錯誤。 ......
我在想什麼?我猜對象沒有很好的定義並導致問題。什麼是解決方法?
感謝
Maksud
增加:
如果添加下面的虛擬方法,那麼它工作得很好。希望它有助於獲得解決方案。
[WebMethod]
public WS_User Dummy()
{
return new WS_User();
}
您是否爲C#生成代理客戶端? – 2009-10-21 06:43:27
是的。我使用Add Web Reference來做到這一點。如果我返回osr.data =「abcd」; //對象是數據,那麼我不會例外。我得到結果=成功和數據=「abcd」;但是如果我使用WS_User對象,那麼我會陷入困境。 – max 2009-10-21 06:50:14