我有一个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);
有什么想法吗?
答案 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,因此客户端不知道它。