ASMX ASP.NET,服务方法

时间:2015-10-21 16:29:37

标签: c# asp.net web-services

我是ASP.NET的新手。我想创建一个包含一个方法的简单Web服务:

以下是代码:

    [WebService(Namespace = "http://cstest.pl/PaintService.asmx/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class PaintService : WebService
    {
        private Random r = new Random();  

        [WebMethod(Description =("Something"))]
        public Nullable<Point> StartDraw(int startX, int startY, int width, int height)
        {
            try
            {
                int X = r.Next(startX, width);
                int Y = r.Next(startY + height);
                return (new Point(X, Y));
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }
    }

然后我有一个客户端类,它给了我一个错误"Cannot implicitly convert type 'WinFormsConsumer.localhost.Point' to 'System.Drawing.Point"

localhost 是我通过选择Add Service Refference...并传递Web Refference,将http://localhost:2540/PaintService.asmx?wsdl添加到WinFormsConsumer类的Web服务的名称。

using System;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;

    namespace WinFormsConsumer  
     {
            public partial class Form1 : Form
            {
                localhost.PaintService ps = new localhost.PaintService();

                private Random r = new Random();
                private Timer timer = new Timer();
                private ArrayList list = new ArrayList();

               public Form1()
               {
                  ...
               }

                private void Timer_Tick(object sender, EventArgs e)
                {
                   //below line gives the error
                   Point temp = ps.StartDraw(ClientRectangle.X, 
        ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height);
                    this.Invalidate();
                }
            }
      }

为什么会出现此错误?我不明白,为什么从Web服务返回的Point类型似乎是&#34;不同的&#34;系统中定义的那些? 我错过了什么?

2 个答案:

答案 0 :(得分:0)

默认情况下,Visual Studio不会重用Web服务公开的所有类型。它将System.Drawing.Point视为第三方类型并定义了一个&#34;代理&#34;匹配它的签名。你必须告诉它你想要哪些类型&#34;重用&#34;在代理中。

编辑服务参考并选中“#34;重复使用指定引用程序集中的类型”框。&#34;然后确保&#34; System.Drawing.DLL&#34;可以选择

有关MSDN的更多信息。

答案 1 :(得分:0)

我做了一些研究,答案是:这是不可能的。这是ASMX的弱点,也是引入WCF的原因之一。我找到了一些解决方法,比如创建SwallowCopy&#39;等等,但它并不是一件好事,只适用于课程。

假设我所说的,加上它只是一个项目而我必须使用它,我决定只使用代理对象。客户并不需要了解它,它现在符合我的需求。