【发布时间】:2011-08-13 18:30:02
【问题描述】:
似乎我一直在为我的 Silverlight WCF 服务中的自定义错误而烦恼,所以我很乐意尽我所能为任何可以帮助我解决此问题的人购买啤酒! !
经过一番痛苦后,我终于让我的 WCF 服务抛出自定义错误 (ParameterValidationFault) 并使用 Fiddler 我知道该服务的响应包含我的序列化故障对象,但 HTTP 响应代码是 500,而不是 200,所以客户端启动抛出异常而不是读取响应。
我知道我的 SilverlightFaultBehavior 类应该负责更改响应状态代码,但我在那里设置的断点永远不会被命中,所以我希望这是一个简单的 web.config 问题(web.config在帖子末尾)。
如果这是相关的,我的 web.config 会显示“元素 'behavior' 具有无效的子元素 'silverlightFaults'...”,在该部分中
<endpointBehaviors>
<behavior name="SilverlightFaultBehavior">
<silverlightFaults/>
</behavior>
</endpointBehaviors>
但我认为这不是问题,因为我可以毫无错误地查看服务的元数据。但是现在我认为这是阻止我的状态代码在退出时被更改的缺失链接。我已经读到这个错误表明我的behaviorExtension 元素中的 type 属性存在问题,与 .NET 认为的不完全匹配,但我已经检查了一百万次,命名空间和程序集名称绝对正确。我没有弄乱版本、文化或公钥的东西。
.NET 有没有一种简单的方法可以准确地告诉我这个类型的字符串应该是什么(空格、逗号等等)?我已经在资源管理器中查看了 dll 的属性,但我仍然没有接近。
非常感谢任何其他关于这可能来自哪里的建议。
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="silverlightFaults" type="my.namespace.SilverlightFaultBehavior, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior name="SilverlightFaultBehavior">
<silverlightFaults/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="my.namespace.IService.customBinding0">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="my.namespace.IService">
<endpoint address="" binding="customBinding" bindingConfiguration="my.namespace.IService.customBinding0" contract="my.namespace.IService" behaviorConfiguration="SilverlightFaultBehavior" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
</configuration>
我的 SilverlightFaultBehavior 类是这样开始的,它是 this MSDN post 的复制粘贴,名称空间发生了变化
namespace my.namespace
{
public class SilverlightFaultBehavior : BehaviorExtensionElement, IEndpointBehavior
{
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
【问题讨论】:
标签: silverlight wcf http-status-codes