WCF和Monotouch中的FaultExceptions无法序列化

时间:2012-02-06 20:47:12

标签: wcf xamarin.ios

我有一个WCF服务,我使用说明here添加到我的Monotouch项目中。服务工作正常,但是当它抛出FaultException时,客户端会发出错误:

  

命名空间“http://schemas.datacontract.org/2004/07/System.ServiceModel”中的预期元素“ExceptionDetail”,但在命名空间中找到了Element节点“MyTypeException”...

我正在以编程方式设置客户端

BasicHttpBinding binding = new BasicHttpBinding();
binding.Name = "BasicHttpBinding_IService";
binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;
binding.Security.Mode = BasicHttpSecurityMode.None;
EndpointAddress address = new EndpointAddress("http://myaddress.com/MyService.svc");
LoyaltyClient client = new LoyaltyClient(binding, address);

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

这是MonoTouch中的一个错误(已filed several times}。

该错误已得到修复,修复很可能会包含在5.2之后的下一个版本中(如果您联系支持人员,可能会获得修补程序)。


更新:2014年11月13日

对于在更新版本中遇到此问题的用户(例如在Xamarin.iOS 7之后),请注意在反序列化[FaultContract]实例时,Mono WCF实现需要 FaultException<T>使用自定义类型T作为异常详细信息。

例如,您需要将[FaultContract]属性添加到在服务器端服务合同中抛出FaultException的方法:

[OperationContract]
[FaultContract(typeof(ContentFaultType))]
void MyMethodThatThrowsAFaultException();

部署此服务器端更改后,您需要使用SlSvcUtil重新生成客户端Silverlight代理。

答案 1 :(得分:0)

看起来您没有使用FaultContractAttribute声明故障类。当你不这样做时,故障类的模式不会进入WSDL,因此客户端不知道它。