Webservice 类重名问题

Alzzl 2010-08-29 05:05:48
我有个公共类 ClassA
webservice端和客户端都需要调用这个类

但是当将这个类加入webservice的引用时 webservice编译时自身会创建个同名类ClassA
这样的话 当客户端需要使用这个类的时候必须加上命名空间前缀 比较麻烦
请问有什么方法可以解决这个问题
...全文
265 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongsun 2010-09-02
  • 打赏
  • 举报
回复
客户端和webservice 的bin 都引用你那个 共用的类库。

生成解决方案的时候,bin中会生成dll。

然后不论是客户端 还是 web服务中 只要 using就可以了。
烈火蜓蜻 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sunpire 的回复:]
引用 6 楼 linux7985 的回复:
2.无法序列化的对象如何作为参数传递

不存在这个问题吧。
为什么不使用 [DataContract]数据契约 来标识复杂对象的序列化呢?
WCF中能使用,Web Service 中也应能使用吧。
[/Quote]

DataContract是不能用在WebService
Sunpire 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 linux7985 的回复:]
2.无法序列化的对象如何作为参数传递
[/Quote]
不存在这个问题吧。
为什么不使用 [DataContract]数据契约 来标识复杂对象的序列化呢?
WCF中能使用,Web Service 中也应能使用吧。
烈火蜓蜻 2010-09-01
  • 打赏
  • 举报
回复
1。Webservice中的方法重载问题
(1)在要重载的WebMethod上打个MessageName标签
比如:
[WebMethod(MessageName = "HelloWorld1")]
public string HelloWorld(){
return "HelloWorld";
}

[WebMethod(MessageName = "HelloWorld2")]
public string HelloWorld(string msg){
return msg + "HelloWorld";
}
(2)此外还要在class上修改WebServiceBinding特性,如下:
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
public class UploadService : System.Web.Services.WebService
{
...
}

2.无法序列化的对象如何作为参数传递
比如:
void TestMethod(MyObject p){
...
}
这里MyObject是一个自定义类,并且无法序列化,如果你的WebService里有这样的方法,那么在浏览asmx时,会提示“MyObject无法序列化,因为没有无参数的构架函数”之类,解决办法有二个:
(a)修改MyObject,使其序列化,但如果MyObject已经封装成程序集(dll)无法修改的话,请看第二种方法
(b)将void TestMethod(MyObject p)修改为

void TestMethod(Object t){
MyObject p = t as MyObject
...
}
即把Object做为参数传入,然后在方法内部再Cast为MyObject,虽然这要增加了额外的拆箱,封箱操作,但总比不能用要好

另外,讲几个小技巧,如果要给方法增加描述说明,让引用webService的人更容易看懂,可以在[WebMethod(MessageName = "HelloWorld1")]后再增加一个Desciption="xxx",即
[WebMethod(MessageName = "HelloWorld1", Description = "描述内容,支持Html语法哦")]

同样整个WebService也可以增加描述,在class上增加Desciption属性,即
[WebService(Namespace = "http://www.yourdomain.com/",Description="服务说明,支持html语法")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
public class UploadService : System.Web.Services.WebService
{
...
}

JiuchunYoung 2010-08-29
  • 打赏
  • 举报
回复
3楼上的答案给你了 你可以看看学习一下
porschev 2010-08-29
  • 打赏
  • 举报
回复
什么意思?
Sunpire 2010-08-29
  • 打赏
  • 举报
回复
参考这篇
http://topic.csdn.net/u/20100817/11/94a60ad0-383f-4574-b2e4-9932dfd37c14.html?70431

6楼。

如果客户端的低层项目中已经存在ClassA的定义,那么在高层项目 添加服务引用/Web引用 时,自动生成的代码中是不会包含有 ClassA 的定义的。
Peter200694013 2010-08-29
  • 打赏
  • 举报
回复
客户端
使用using 引入命名空间

使用类时就不用加了...
Peter200694013 2010-08-29
  • 打赏
  • 举报
回复
你是说,客户端使用时不加命名空间

12,166

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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