ASMX ASP.奇怪的返回类型由服务方法
本文关键字:服务 方法 返回类型 ASP ASMX | 更新日期: 2023-09-27 18:18:51
我是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是我添加到WinFormsConsumer类作为Add Service Refference...
的web服务的名称,通过选择Web Refference
并传递http://localhost:2540/PaintService.asmx?wsdl
。
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
类型是"不同的",那些在系统中定义的?我错过了什么?
默认情况下,Visual Studio不会重用web服务公开的所有类型。它将System.Drawing.Point
视为第三方类型,并定义与其签名匹配的"代理"。您必须告诉它您希望在代理中"重用"哪些类型。
编辑服务引用并选中"在指定的引用程序集中重用类型"的复选框。然后确保"System.Drawing.DLL"可用并选中
关于MSDN的更多信息
我做了一些研究,答案是:这是不可能的。这是ASMX的弱点,也是引入WCF的原因之一。我已经找到了一些工作,比如创建"SwallowCopy"类等,但这并不是真正的好事情,只能与类一起工作。
所以假设我所说的,加上它只是一个项目,我必须使用它,我决定只使用代理对象。客户不需要知道它,它现在符合我的需求。