カスタム例外を作成したWebサービスがあります。この例外の名前がInvalidContractExceptionであるとしましょう。ASMX Webサービスからカスタム例外をキャッチ
私がしたいのは、特定のステップが発生した場合、この例外をスローすることです。しかし、クライアントが正しく処理するためにInvalidContractExceptionをキャッチする方法を理解できません。
この
は、ASP.Net Webサービスが障害をスローWCFサービスへのクライアント・コールではC#のカスタム例外を作成したWebサービスがあります。この例外の名前がInvalidContractExceptionであるとしましょう。ASMX Webサービスからカスタム例外をキャッチ
私がしたいのは、特定のステップが発生した場合、この例外をスローすることです。しかし、クライアントが正しく処理するためにInvalidContractExceptionをキャッチする方法を理解できません。
この
は、ASP.Net Webサービスが障害をスローWCFサービスへのクライアント・コールではC#の:
ASMX Webサービスでは、SOAPフォルトが適切にサポートされていません。クライアント側でSoapException以外の例外を取得する方法はありません。
さらにWCFにアップグレードする別の理由。あなたははASMXで行うことができないものの例として
、ここでWCFがどのように動作するかです。 WCFは、あなたがそれを返すことができた欠陥、各Webサービス操作のために、指定することができます:
[ServiceContract]
public interface IMyServiceContract
{
[FaultContract(typeof(IntegerZeroFault))]
[FaultContract(typeof(SomeOtherFault))]
[OperationContract]
public string GetSomeString(int someInteger);
}
[DataContract]
public class IntegerZeroFault
{
[DataMember]
public string WhichInteger {get;set;}
}
[DataContract]
public class SomeOtherFault
{
[DataMember]
public string ErrorMessage {get;set;}
}
public class MyService : IMyServiceContract
{
public string GetSomeString(int someInteger)
{
if (someInteger == 0)
throw new FaultException<IntegerZeroFault>(
new IntegerZeroFault{WhichInteger="someInteger"});
if (someInteger != 42)
throw new FaultException<SomeOtherFault>(
new SomeOtherFault{ErrorMessage ="That's not the anaswer"});
return "Don't panic";
}
}
WCFクライアントは、その後、たとえば、FaultException<SomeOtherFault>
をキャッチすることができます。これをJavaクライアントで試したところ、SomeOtherFault
を取得できました.IBM Rational Web Developerは、Java Exception
クラスから派生させるために作成しました。
で書かれている、あなたは
を行う(FaultExceptionとして..
キャッチ障害を試してみてくださいYourService.FooBarFaultの)
エンドあなたが目を生成することができ、サービスメソッドのFaultContractを宣言する必要が
を試してみてください例えば、あなたがこれを行うことはできません
_
<FaultContract(GetType(FooBarFault))> _
Function yourCall
あなたが何かが間違っていたことをユーザーが知ることができるように例外をスローすることが目的ならば、特定の例外が発生し、特別な処理があります。クライアントプロキシの正しい実装に頼らざるを得ません(実際には、クライアントプロキシを自分自身に提供することもできます)。
SoapException
さんの作品について役に立つ記事があります。here
本質的には、SoapException
の詳細ノードで例外の詳細(たとえばエラーコード)をエンコードしてから、例外を再発行する前にクライアント側で解析します。
サービス境界を越えてスローされたように例外を再作成する方法はなく、クライアント側でSoapException以外の何かを取得する自動方法はありません。
彼はASMXを使用しています。彼はそれを "ASP.NET Web Services"と呼びます。 –
ああ、私は彼がWCFを使っていると思っていました –