通过Silverlight应用程序调用WCF Service时遇到的NotFound异常

在项目中遇到了一个问题,这个问题困扰了我很久了,在我的项目中有两个solution,第一个solution是一个Silverlight Website,第二个solution是一个本地的wcf service,其中wcf service是用来调用远程的两个service,这里我把远程的两个service命名为RemoteServiceA和RemoteServiceB。整个调用过程请参看下图:

CAL3

(发现没有装visio,图稍后补上)

流程是这样的,本地service去调用远程的两个service(RemoteServiceA和RemoteServiceB),Silverlight再去调用本地的service,在这里,调用RemoteServiceA的整个过程没有出现问题,但在Silverlight Website发送请求给本地service后,本地service通过传递过来的参数去找RemoteServiceB拿数据,数据也可以成功的返回给本地service,但当本地service的方法将返回值回传给Silverlight的时候出现了异常,出现异常的地方是Silverlight应用程序对本地service的引用中,也就是大家知道的reference.cs文件中,具体产生异常的方法是Base.EndInvoke这里,总是提示”CommunicationException: The remote server returned error message: NotFound”,通过不断的实验、测试发现,如果我将返回的对象中的数据(我需要的数据都是保存在对象的属性中的)赋值给字符串,然后返回这个字符串,而非这个对象,则不会出现异常,后来也试过返回其他基本类型,如int、bool等等都可以,也就是说我返回的代理类中的类型是不能被解析的。后来通过同事的帮助,发现问题出在本地service的接口方法定义上,需要在我调用RemoteServiceB的方法上加上[XmlSerializerFormat]的描述信息,出现问题的原因就在于本地service方法返回给Silverlight的对象需要序列化。由此问题解决,但最后还是有一点不明白的就是为什么同样是Remote service,RemoteServiceA能够完成整个通讯过程呢?还需要继续研究一下。

posted @ 2009-10-15 10:01  王一平  阅读(1068)  评论(0编辑  收藏  举报