分享WCF小经验 散分

wzp144650 2010-01-29 02:38:15
最近在学WCF,郁闷透了,各种异常!google baidu上也很难找到一些关于WCF异常的解决方案!

把我最新的一个异常解决方案跟大家分享一下吧。

看了ChatRoom,也仿照着谢了一个聊天室,昨天想加一个传送文件的功能,写好了服务端代码之后,在更新客户端的引用时出现了异常:“元数据包含无法解析的引用:……”,不仅仅是更新引用,哪怕添加这个地址的引用的时候也同样出现问题。

顿时蒙了,由于总遇见各种异常,大部分是配置文件的问题,所以没想到是因为自己新加的传输文件的代码引发的。手忙脚乱的调了半天都不行,极其郁闷!!! 冷静下来之后,抱着试着看的态度去删除新加的所有代码,果然不报错了,Yeah,找到入口了!

之后逐行删除,终于明白了,是因为双工的回调接口与服务类的接口有相同方法名的方法。。。。。。

看WCF的书的时候我就记着不能直接写重载方法,好像要加什么标签(书在家里呢,记不起来了)。没想到两个接口之间也不能出现相同的方法名的方法。。。

不过总算调好了,心情舒畅极了,希望此贴对大家有帮助
...全文
203 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdh004 2012-07-31
  • 打赏
  • 举报
回复
我也遇到过楼主的问题,同感
qq88138294 2010-01-30
  • 打赏
  • 举报
回复
yugjhgkljhkjhkj
wzp144650 2010-01-29
  • 打赏
  • 举报
回复
公开代码?

不是不想公开呀,写着完写得比较垃圾,你去下CHATROOM
xiaogug01 2010-01-29
  • 打赏
  • 举报
回复
先恭喜下 哈哈 最好代码公开下 不过没关系啦 lz您随意。哈哈
xiaodemingaa 2010-01-29
  • 打赏
  • 举报
回复
支持楼主! 给分吧
qqiuzaihui 2010-01-29
  • 打赏
  • 举报
回复
wiki14 2010-01-29
  • 打赏
  • 举报
回复
恭喜
care365 2010-01-29
  • 打赏
  • 举报
回复
jf
S314324153 2010-01-29
  • 打赏
  • 举报
回复
进来看看,积累点经验
tianliang1 2010-01-29
  • 打赏
  • 举报
回复
gx,jf
24K純帥 2010-01-29
  • 打赏
  • 举报
回复
up,too
sssddfff 2010-01-29
  • 打赏
  • 举报
回复
up
wzp144650 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qldsrx 的回复:]
晕倒,原来你指的是这里的同名啊,不给出代码根本不知道你说的什么,不过按理说,不会出现重名的可能啊,至少我不会在命名上重复。如果不小心重名了,那就必须要通过显式接口来区分,不过比较麻烦。
另外如果你服务端可以这样没有问题的启动出来,说明客户端应该也支持重名的,只不过不能通过更新引用的方法了,要手动创建接口,其实一个接口项目同时两处引用就可以问题解决了。
[/Quote]


我也是不小心写重了。

哎,主要是报出来的错让人不知所措。。。而且很少有WCF的文章,搜半天也找不到答案,所以写出来,以后别人也许会遇到
qldsrx 2010-01-29
  • 打赏
  • 举报
回复
晕倒,原来你指的是这里的同名啊,不给出代码根本不知道你说的什么,不过按理说,不会出现重名的可能啊,至少我不会在命名上重复。如果不小心重名了,那就必须要通过显式接口来区分,不过比较麻烦。
另外如果你服务端可以这样没有问题的启动出来,说明客户端应该也支持重名的,只不过不能通过更新引用的方法了,要手动创建接口,其实一个接口项目同时两处引用就可以问题解决了。
wzp144650 2010-01-29
  • 打赏
  • 举报
回复
我认为已经说的很清楚了,这个结论好像根本不用代码。。。

是因为双工的回调接口与服务类的接口有相同方法名的方法





//回调接口
interface ICallback
{
[OperationContract(IsOneWay=true)]
void ReceiveMsg(ChatModel message);
[OperationContract(IsOneWay=true)]
void UserLeave(ChatModel message);
[OperationContract(IsOneWay=true)]
void UserEnter(ChatModel message);
[OperationContract(IsOneWay=true)]
void ReceiveWhisperMsg(ChatModel message);

[OperationContract(IsOneWay=true)]
void AcceptFile(ChatModel message);
}


//服务接口

[ServiceContract(CallbackContract=typeof(ICallback),SessionMode=SessionMode.Required)]
interface IChatService
{
[OperationContract(IsOneWay = true, IsTerminating = false, IsInitiating = true)]
void Join(ChatModel message);

[OperationContract(IsOneWay=true,IsTerminating=false,IsInitiating=true)]
void SendMsg(ChatModel message);

[OperationContract(IsOneWay = true, IsTerminating = false, IsInitiating = true)]
void WhisperMsg(ChatModel message);

[OperationContract(IsOneWay = true, IsTerminating = true, IsInitiating = true)]
void Leave(ChatModel message);

[OperationContract(IsOneWay=true,IsTerminating=false,IsInitiating=true)]
void AcceptFile(ChatModel message);
}



由于两个接口中都有AcceptFile方法,所以会报错,只需将改下方法名即可

qlzf11140820 2010-01-29
  • 打赏
  • 举报
回复
llsus 2010-01-29
  • 打赏
  • 举报
回复
每天回复得积分
longhair9711 2010-01-29
  • 打赏
  • 举报
回复
mengfanzongfox 2010-01-29
  • 打赏
  • 举报
回复
9494代码公开下吧!
qldsrx 2010-01-29
  • 打赏
  • 举报
回复
没有一点代码,讲的也很抽象,至少把你错误时的错误代码贴出来看下,不然怎么叫分享经验?给我的感觉仅仅是在发泄一下。
加载更多回复(7)

110,566

社区成员

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

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

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