SilverLight?
SilverLight?
SilverLightに向け、サーバー側で発生する例外をクライアントへ通知するため、下記のURLのように、実装する必要があります。
http://msdn.microsoft.com/ja-jp/library/dd470096(en-us,VS.96).aspx
※注意点
■behaviorExtensionsに宣言したビヘイビアの「Type」要素に型名とアセンブリ名の間に必ずスペースを入れてください。入れないと、認識されません。
誤る例:
<behaviorExtensions>
<add name="mySilverlightFaultsBehavior" type="WCFServices.SilverlightFaultBehavior,WCFServices,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
</behaviorExtensions>
正しい例:(スペースに注目してください。)
<behaviorExtensions>
<add name="mySilverlightFaultsBehavior" type="WCFServices.SilverlightFaultBehavior, WCFServices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
参考情報
■FaultException<T>を利用して、例外をスローする場合、Tのクラス内にException型のプロパティを定義できません、定義したら、SilverLightクライアント側、FaultExceptionの例外を認識できなくなります。
http://msdn.microsoft.com/ja-jp/library/ms733721.aspx
System.ServiceModel.FaultException<ErrorInfo>のようなサービス側のカスタマイズした例外クラスは、Silverlight側のクライアントが分かるため、Web.Configファイルに下記にようにWCFを設定する必要があります。
<system.serviceModel>
<extensions>
<behaviorExtensions>
<!-- ポイント -->
<add name="mySilverlightFaultsBehavior" type="SilverlightClassLibrary.WCF.SilverlightFaultBehavior, SilverlightClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<bindings>
<customBinding>
<binding name="BusinessApplication1.Web.Services.Service1.customBinding1">
<binaryMessageEncoding />
<httpTransport transferMode="Streamed" />
</binding>
</customBinding>
</bindings>
<services>
<service name="BusinessApplication1.Web.Services.Service1">
<endpoint address="" binding="customBinding" bindingConfiguration="BusinessApplication1.Web.Services.Service1.customBinding1"
contract="BusinessApplication1.Web.Services.Service1" behaviorConfiguration="SilverlightFaultBehavior" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<!-- ポイント -->
<behavior name="SilverlightFaultBehavior">
<mySilverlightFaultsBehavior />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
コメント: