0

Web ブラウザーで vector.asmx を実行しようとすると、次のエラーが発生します。何が問題ですか?

インターフェイスであるため、System.ComponentModel.ISite 型のメンバー System.ComponentModel.MarshalByValueComponent.Site をシリアル化できません。

【私のコード】

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;
        }
    }
}
4

1 に答える 1

2

Vector クラスを返すことはできません。これはサービスのインスタンスへの参照になり、意味がありません。


実際、あなたのサービス全体は意味がありません。Web サービスは特殊なクラスです。データと動作の結合などの通常の OO の概念は機能しません。Vectorすべての公開データを含むような 1 つのクラスVectorServiceと、サービス自体である別のクラスが必要です。type のパラメーターを受け入れVector、そのような値も返します。

于 2013-04-02T00:42:59.013 に答える