我是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;系统中定义的那些?
我错过了什么?
答案 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;等等,但它并不是一件好事,只适用于课程。
假设我所说的,加上它只是一个项目而我必须使用它,我决定只使用代理对象。客户并不需要了解它,它现在符合我的需求。