Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF异常处理_Wcf_Exception - Fatal编程技术网

WCF异常处理

WCF异常处理,wcf,exception,Wcf,Exception,我有五个独立的服务,每个服务对应于不同的数据库表,如产品、用户、订单等 我正在尝试通过WCF发送自定义异常。我已浏览互联网,并将自定义异常包装在故障异常中: interface [FaultContract(typeof(NoSuchInstanceException))] cs throw new FaultException<NoSuchInstanceException>(e, new FaultReason(e.Message), newFaultCode("UserFa

我有五个独立的服务,每个服务对应于不同的数据库表,如产品、用户、订单等

我正在尝试通过WCF发送自定义异常。我已浏览互联网,并将自定义异常包装在故障异常中:

interface
[FaultContract(typeof(NoSuchInstanceException))] 

cs
throw new FaultException<NoSuchInstanceException>(e, new FaultReason(e.Message), newFaultCode("UserFault"));
接口
[FaultContract(类型(NoSuchInstanceException))]
反恐精英
抛出新的FaultException(e、新的FaultReason(e.Message)、新的FaultCode(“UserFault”);
问题是,当我更新服务时,客户端代理将消失。我浏览了互联网,发现了以下解决方案,即向服务引用SVCMAP文件添加映射



我的问题是,每个服务都需要将自定义异常添加到映射中,但当我这样做时。将显示一个错误,说明已在其他服务之一中定义了异常。我是否将这些服务合并到一个服务中?非常感谢您的帮助。谢谢

我可以想出两个选择:

  • 将服务合并为一个服务-如果多个服务共享相同的数据类型,则会在客户端上出现此问题
  • 将共享数据类型移动到单独的dll(类库项目)中。然后从服务器和客户端引用该共享数据类型库。创建服务引用时,请选择重用数据类型的选项

“问题是当我更新服务时,客户端代理将消失。”请详细说明。@CodeCaster:当我将:[FaultContract(typeof(NoSuchInstanceException))]添加到我的服务接口并更新我的服务引用时。服务客户端和ISService客户端消失,并显示一个警告:“检查所需的命名空间是否已映射到不同的数据契约命名空间,并考虑使用命名空间集合显式地映射它。”“如果多个服务共享相同的数据类型,则客户端会出现此问题。“是的,我不敢从两个不同的服务发送字符串。您能解释一下您的意思吗?@CodeCaster:string是一种本机数据类型,其行为非常类似于共享数据类型库。如果您有一个自定义类型,并从两个不同的服务返回它,那么该自定义类型将在客户端上生成两次-每个服务生成一次。感谢您的响应。我认为第一种选择是唯一可能的。我不想向任何使用我的服务的人提供dll。我不太希望有一个庞大的服务。难道没有一种方法可以为孩子提供家长服务吗?这是将多个服务作为一个服务的最干净的解决方案吗?
<NamespaceMapping
    TargetNamespace="http://schemas.datacontract.org/2004/07/MyCompany.MyProject.Exceptions" ClrNamespace="MyCompany.MyProject.Exceptions" />
</NamespaceMappings>