WCFBasic-HTTPWebサービスとして公開されている要求/応答ポートタイプのBizTalk2009オーケストレーションがあります。ポートには1つの操作があり、その操作には適切なスキーマを持つ要求メッセージと応答メッセージがあります。このポートで要求を受信した後、標準の応答メッセージの代わりに障害メッセージをクライアントに返す必要がある場合がいくつかあります。正しい障害メッセージをクライアントに返すのに問題があります。SOAP障害メッセージの要素faultcode
と要素の両方を設定できるようにしたいと思います。faultstring
これが私が試したことです:
文字列型の障害メッセージの追加:メッセージ型が文字列の障害メッセージを操作に追加してみました。オーケストレーション内で、文字列メッセージを作成し、それを応答として送信しました。クライアントに返送された障害は次のようになりました。
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
<faultstring xml:lang="en-US"><?xml version="1.0" encoding="utf-8"?>
<string>This is the error message.</string></faultstring>
<detail>
<ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HelpLink i:nil="true"/>
<InnerException i:nil="true"/>
<Message><?xml version="1.0" encoding="utf-8"?>
<string>This is the error message.</string></Message>
<StackTrace>at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkAsyncResult.End() ...</StackTrace>
<Type>Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkNackException</Type>
</ExceptionDetail>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
これはほとんど機能しますが、faultstring
要素に文字列自体ではなく、xmlシリアル化されたバージョンの文字列が含まれている点が異なります。faultcode
要素も設定できません。
タイプの障害メッセージを追加するhttp://schemas.xmlsoap.org/soap/envelope/#Fault
Fault
要素
を作成して送信した場合に予想される内容に沿って障害メッセージを返すようにBizTalkを説得できるかもしれないと思いました。そこで、タイプがの障害メッセージを追加しhttp://schemas.xmlsoap.org/soap/envelope/#Fault
、適切なメッセージを作成して、それを応答として送信しました。結果は上記と同じでしたが、文字列の代わりに、faultstring
要素に、CDATA
私が作成したxmlメッセージ全体を含むセクションが含まれていました。
だから私は今立ち往生しています。これはBizTalkでは簡単な作業だと思います。MSDNのドキュメント「WCFサービスとして公開されているオーケストレーションから障害例外をincludeExceptionDetailInFaults
スローする方法」では、障害例外をスローできることと、構成で設定する必要があることを除いて、障害例外をスローする「方法」については何も説明されていません(終わり)。
これをBizTalk2009でどのように実現できるかについて、誰か提案がありますか?