私の残りのベースの WCF サービスでは、カスタム フォールト例外をスローし、使用する特定の XML 出力形式があるため、XML シリアライザーを使用して結果をシリアル化したいと考えています。
オンラインの例に正確に従いましたが、コードが例外をスローした後、xml 形式の応答が得られません。代わりに、Request Error という名前のサーバーからの標準的な応答のように見えるものの中に、大量の html を含む XML タグを取得します。私が得るテキストは(htmlタグ)です:
The server encountered an error processing the request. The exception message is 'Error 123'. See server logs for more details. The exception stack trace is:
at CSW.Services.CheckForCatalogueFaults(String request, String service) in C:\netDev\CatalogueService\CatalogueService\Services.svc.cs:line 64
at CSW.Services.GetCapabilities(String request, String version, String service) in C:\netDev\CatalogueService\CatalogueService\Services.svc.cs:line 69
at SyncInvokeGetCapabilities(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
次の設定とクラスがあります。
サービス:
[OperationContract]
[XmlSerializerFormat(SupportFaults = true)]
[FaultContract(typeof(CatalogueFaultContract))]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/csw?REQUEST={request}&VERSION={version}&SERVICE={service}")]
Capability GetCapabilities(string request,string version, string service);
..サービス実装における私のエラーチェック条件の1つ...
if (string.IsNullOrEmpty(request))
{
cswFault.Exception = new CswException("MissingParameterValue", "request");
cswFault.ErrorMsg = "Error";
throw new FaultException<CatalogueFaultContract>(cswFault);
}
私のカスタム FaultException クラス:
[XmlRoot(ElementName = "ExceptionReport",Namespace="http://www.opengis.net/ows")]
public class CatalogueFaultContract
{
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces Ns;
[XmlAttribute(AttributeName = "Version")]
public string Version = "1.0.0";
[XmlElement(Namespace = "http://www.opengis.net/ows")]
public CswException Exception { get; set; }
[XmlAttribute(Namespace = XmlSchema.Namespace, AttributeName = "schemaLocation")]
public string xsiSchemaLocation = "http://www.opengis.net/ows http://schemas.opengis.net/ows/1.0.0/owsExceptionReport.xsd";
[XmlIgnore]
public string ErrorCode { get; set; }
[XmlIgnore]
public string ErrorMsg { get; set; }
public CatalogueFaultContract()
{}
public CatalogueFaultContract(string errorCode,string locator)
{
Ns = new XmlSerializerNamespaces();
Ns.Add("", "");
Ns.Add("ows", "http://www.opengis.net/ows");
Exception=new CswException(errorCode,locator);
}
}
シリアル化された障害クラスが表示されない理由がわかりません...適切にシリアル化できない場合を除きますか? 非常に単純なクラスで試してみましたが、同じ応答が得られます。