C# winform webservice

wolf_Knight 2010-05-04 12:44:22
web service的功能比较单一,比如有 add(),update(),del(),select() 四个对数据库进行操作的方法,想只做一个这样的类,公开上述4个方法,然后在方法带入相应的参数(比如实体类或者其他),根据带入的参数(可以利用反射)来调用相应的处理模块的方法来实现。假如add 带入的实体类如何才能做成泛型呢?因为要在client公开,好像要[XmlInclude(typeof(obj))]这个参数


...全文
292 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
diaoluodexue 2010-11-30
  • 打赏
  • 举报
回复
对啊,就是这样,我把一个实体类做到一个dll里,在服务器端和客户端都引用这个实体类,可是在客户端的实体类中vs会给我们生成一套reference下的实体,而且和dll中的实体不能相互转换,矛盾就这样出来了,明明是一个类的对象,却不能当一个东西来使。不知道怎么解决。
wolf_Knight 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zenghd 的回复:]
我承认我不懂你的意思
你说的通用是什么意思呢?
[/Quote]

通用就是说,winform client 调用的web service 的Add(T obj)方法,
T是个实体类,是server端的实体类,(当然我不知道如果我server端和client 都建立同样的一个实体类,server端是否能得到),但是我如何去公开这个server的实体类,供client端调用?
ZengHD 2010-05-05
  • 打赏
  • 举报
回复
我承认我不懂你的意思
你说的通用是什么意思呢?
wolf_Knight 2010-05-05
  • 打赏
  • 举报
回复
没有高人肯指点一下?
wolf_Knight 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zenghd 的回复:]
C# code

struct myinfo
{
public string name;
public int id;
}

private void button1_Click(object sender, EventArgs e)
{
……
[/Quote]

这位大哥显然没有明白我的意思,这样的泛型显然大家都会写,我是想如何在client和server端都能共用,比如我不用泛型,只要我在server端公开的add( test itest) 公开 这个test实体类([XmlInclude(typeof(test ))]),我client就可以调用,但是我是想做成通用的,我怎么公开呢。当然大家也可以说,不一定要用实体类,用数组或者其他类型,然后在server端解析一下也可以。
wolf_Knight 2010-05-05
  • 打赏
  • 举报
回复
还有一个问题想咨询一下大家:
vs2008 中 winform 有web refernces 和 service refernces两种,请问有什么区别?
另外如果想动态配置URL,该如何配置呢?谢谢
wolf_Knight 2010-05-05
  • 打赏
  • 举报
回复
唉,自己解决了,不过不知道是否是有效的方式
masky5310 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wolf_knight 的回复:]
引用 12 楼 zenghd 的回复:
引用 11 楼 wolf_knight 的回复:
但是我如何去公开这个server的实体类,供client端调用?


可以使用文档公开,也可以发邮件给开发client的人,介绍接口
另外,如果client是别的语言开发,例如JAVA,最好别使用C#特用的类据类型


呵呵,我说的公开是如下看代码:


C# code

……
[/Quote]
wolf_Knight 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zenghd 的回复:]
引用 11 楼 wolf_knight 的回复:
但是我如何去公开这个server的实体类,供client端调用?


可以使用文档公开,也可以发邮件给开发client的人,介绍接口
另外,如果client是别的语言开发,例如JAVA,最好别使用C#特用的类据类型
[/Quote]

呵呵,我说的公开是如下看代码:


[XmlInclude(typeof(WebResEntity))]
[WebMethod]
public string AddData(WebResEntity Res)
{
try
{
// ...........
//..........
return string.Empty;
}
catch (Exception ex)
{

return ex.Message;
}

}


WebResEntity 是webservice 的一个实体类,如果我要公开给client端调用,我只要在该方法AddData上面标注特性[XmlInclude(typeof(WebResEntity))],client 就可以直接调用,但是如果我要用泛型来表示如下:


// [XmlInclude(typeof(WebResEntity))]
[WebMethod]
public string AddData<T>(T Res)
{
try
{
// ...........
//..........
return string.Empty;
}
catch (Exception ex)
{

return ex.Message;
}

}


AddData就是一个泛型的方法,对于数据库的操作,我只要这个方法就行,比如不管你是新增用户,还是新增角色,只要带入的T是不同的实体类就行了,AddData里面会根据你带入的不同实体类,去解析调用不同的处理模块。问题是这个T是server端的实体类,我无法用[XmlInclude(typeof(T))]来公开给client调用,不知道你明白我的意思没有?
ZengHD 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wolf_knight 的回复:]
但是我如何去公开这个server的实体类,供client端调用?
[/Quote]

可以使用文档公开,也可以发邮件给开发client的人,介绍接口
另外,如果client是别的语言开发,例如JAVA,最好别使用C#特用的类据类型
ZengHD 2010-05-04
  • 打赏
  • 举报
回复
简单点 add(object obj)
Comeonzhou 2010-05-04
  • 打赏
  • 举报
回复
帮顶了
lovehong123 2010-05-04
  • 打赏
  • 举报
回复
你的想法很好,我想是有可能的,我以前也看别人做过个东西,不过我记得不是很清楚了
ZengHD 2010-05-04
  • 打赏
  • 举报
回复

struct myinfo
{
public string name;
public int id;
}

private void button1_Click(object sender, EventArgs e)
{
aa<int,string>(1,"2");
aa<string, string>("1", "2");

myinfo info1,info2;
info1.id=1;
info1.name = "1";

info2.id=2;
info2.name = "2";

aa<myinfo,myinfo>(info1,info2);
}

private void aa<T1,T2>(T1 t1, T2 t2)
{
}
wolf_Knight 2010-05-04
  • 打赏
  • 举报
回复
没人做过嘛?
flyerwing 2010-05-04
  • 打赏
  • 举报
回复
看看!
wolf_Knight 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zenghd 的回复:]

简单点 add(object obj)
[/Quote]
其实我开始想公开实体类来做,是因为我想实体类可以和实际处理的类有相应的关系,如果你用object,那我怎么做成通用的方法去调相应的处理类?
完整的服务端及客户端调用程序,在win7+ vs2015环境运行通过. 一、说明 1、创建winfrom应用程序;(或者是控制台项目) 2、在项目中添加一个WCF服务,并实现服务; 3、在需要启动WebService服务的地方启动该服务即可; 二、代码如下: 1、新建一个WCF服务——定义服务接口    [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]     public interface ICalculator     {         [OperationContract]         double Add(double n1, double n2);     } 2、新建一个WCF服务——实现服务 public class CalculatorService : ICalculator     {         public double Add(double n1, double n2)         {             return n1 + n2;         }     } 3、添加完WcF服务后会在应用程序配置文件中有入下节点                             <!--TestServer.ICalculator服务定义的接口,根据自己定义进行修改-->                                                                   <baseAddresses> <!--这个是要发布的服务地址,可以进行修改-->                                   </baseAddresses>                   4、在要启动服务的地方启动服务监听   public frmMain() { InitializeComponent(); } private void frmMain_Load(object sender, EventArgs e) { try { //打开服务创建监听,并开始监听消息 ServiceHost serviceHost = new ServiceHost(typeof(Service1));//需要using System.ServiceModel; serviceHost.Open(); label1.Text = "服务启动正常"; } catch (Exception ex) { label1.Text = ex.Message; } } 5、下面可以在客户端通过上面的服务地址”http://xxx.xxx.xxx.xx:8733/test/Service1/“对服务进行调用 到这步就实现在控制台中实现webService的发布。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧