不能序列化System.ComponentModel.ISite类型的成员
本文关键字:类型 成员 ISite ComponentModel 序列化 System 不能 | 更新日期: 2023-09-27 18:06:49
我正在尝试运行向量。在web浏览器中打开Asmx并得到以下错误。有什么问题吗?
不能序列化System.ComponentModel.MarshalByValueComponent.Site类型为System.ComponentModel.ISite的成员,因为它是一个接口。
(我的代码)using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace WebApplication2
{
/// <summary>
/// Summary description for Vector
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class Vector : System.Web.Services.WebService
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
[WebMethod]
public double MagnitudeSquared()
{
return X * X + Y * Y + Z * Z;
}
[WebMethod]
public double Magnitude()
{
return Math.Sqrt(MagnitudeSquared());
}
[WebMethod]
public static Vector operator -(Vector v1, Vector v2)
{
Vector result = new Vector();
result.X = v1.X - v2.X;
result.Y = v1.Y - v2.Y;
result.Z = v1.Z - v2.Z;
return result;
}
[WebMethod]
public static Vector operator +(Vector v1, Vector v2)
{
Vector result = new Vector();
result.X = v1.X + v2.X;
result.Y = v1.Y + v2.Y;
result.Z = v1.Z + v2.Z;
return result;
}
[WebMethod]
public static Vector operator *(Vector v1, double factor)
{
Vector result = new Vector();
result.X = v1.X * factor;
result.Y = v1.Y * factor;
result.Z = v1.Z * factor;
return result;
}
[WebMethod]
public Vector Clone()
{
Vector result = new Vector();
result.X = this.X;
result.Y = this.Y;
result.Z = this.Z;
return result;
}
}
}
不能返回Vector类。这将是对服务实例的引用,这是没有意义的。
事实上,你的整个服务毫无意义。web服务是一个专门化的类。像组合数据和行为这样的普通OO概念不起作用。您应该有一个类,如Vector
,它包含所有公共数据,另一个类VectorService
,它是服务本身。它将接受类型为Vector
的参数,并且也将返回这样的值。