0

作業中のアプリがあり、2 つのコールド Fusion Web サービスを呼び出す必要があります。

http://blah/search.cfc and http://blah/asset.cfc

どちらも「QueryBean」を返します。それらを DAM_Search および DAM_Asset と呼びました。QueryBean の結果は同じ型ですが、2 つのディレクトリに格納されます。

DAM_Search にはこのクラスが プロジェクト フォルダー\Web References\DAM_Search\Reference.cs にあり、DAM_Asset には同じクラスが プロジェクト フォルダー\Web References\DAM_Asset\Reference.csにあります。

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.SoapTypeAttribute(Namespace="http://wstypes.newatlanta.com")]

public partial class QueryBean {

    private object[] dataField;
    private string[] columnListField;

    /// <remarks/>
    [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
    public object[] data {
        get {
            return this.dataField;
        }
        set {
            this.dataField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
    public string[] columnList {
        get {
            return this.columnListField;
        }
        set {
            this.columnListField = value;
        }
    }
}

私の問題は、このサービスからの結果を、QueryBean を XML ノードに変換する単一の関数に送信して、それを呼び出したアプリに戻すことができるようにしたいということです。しかし、DAM_Search.QueryBean が DAM_Asset.QueryBean と同じではないため、関数を使用しようとすると失敗します。キャストしてみると

private XmlDocument Get_AssetInfo(object qBean)
{
      DAM_Search.QueryBean qBean2 = (DAM_Search.QueryBean)qBean;

このエラーメッセージが表示されます

*「DAM_Service.DAM_Asset.QueryBean」タイプのオブジェクトを「DAM_Service.DAM_Search.QueryBean」タイプにキャストできません。

データ型が実際に同じであることを知っているのでキャストを強制する方法はありますか、または QueryBean クラスに同じクラス参照を使用するように Web サービスに指示する方法はありますか?

これはそこにいる誰かに何かをもたらしますか?:-)

ティム

4

1 に答える 1

0

このキャストは、オブジェクトの両側が完全に同一になるようにする (つまり、型名とアセンブリ名も同じにする) 場合に実行できる場合があります。

つまり、QueryBean などの共有クラスを含む別の DLL を作成できるということです。次に、両方のサービスからこのプロジェクトを参照します。これでキャストは成功するはずです。

失敗する理由は、両方のプロジェクトの QueryBean クラスがまったく同じプロパティを持っていても、2 つの型がまったく異なるアセンブリにあるため、.NET Framework がそれを認識しないためです。

于 2012-10-29T22:27:16.133 に答える