0

Sonic ESB プロセスを Web サービスとして公開し、メソッドを呼び出してデータをアップロードする .NET アプリケーションを作成しました。

このために、.NET 側に複雑なオブジェクトのライブラリを用意し、それを Sonic ESB 側の Web サービス定義に xml 形式で追加しました。これは、Sonic ESB プロセスを公開するために必要な手順です。呼び出されるメソッドは、.NET アプリケーションから渡されるオブジェクトを認識できる必要があるためです。

ただし、サービス参照を .NET アプリケーションに追加しようとすると、同じライブラリがサービスの両側で 2 つの異なるものとして扱われます。これは、異なる名前空間に割り当てられているためです。サービス参照を作成するときに「参照されたアセンブリで型を再利用する」がチェックされていることを確認しても違いはありません。互いに対応する異なる型は分離されています。

したがって、次のコードはエラーになります。

    public string PushManifest(FargoGate.DtoLib.OutboundFargoMessage message)
    {
        FargoGateOnRampWSRequest wsRequest = new FargoGateOnRampWSRequest();

        OutboundFargoMessage outMessage = new OutboundFargoMessage();

        //TODO ERROR: Cannot convert source type 'FargoGate.DtoLib.OutboundMessage' to target type 'PollFargoJob.FargoGateOnrampWS.OutboundFargoMessage'
        wsRequest.OutboundFargoMessage = message;

        throw new NotImplementedException();
    }

どんな提案でも大歓迎です!

4

3 に答える 3

0

別々のWebサービスで同じタイプを試してみてください 。具体的には、そこで最初の答えを試してください。

私はあなたが何をしているのかはっきりとはわかりませんが、それがあなたが必要としていることのようです。

于 2010-04-12T16:23:21.800 に答える
0

提案されているように、svcutil.exeはまったく必要ないように見えますが、xsd.exeを使用してデータモデルのスキーマを生成し続けます。データモデルがサービスの両側で完全に同じであることを確認するために、まさにそれを行いました。ただし、更新されたスキーマを使用しようとするとSonic Workbenchがクラッシュし続けるため、何らかの理由でWebサービスを適切に作成できませんでした。おそらく、スキーマが複雑すぎてWorkbenchで処理できませんか?

さて、私は今、汚いトリックを使ってそれを解決しました。WCFを使用する代わりに、Webサービスを登録するための標準の.NET2.0の方法を使用しています。Sonic ESB Webサービスでは、ライブラリのデータ型ではなく、入力パラメーターの型を文字列に設定しました。Webサービス操作を呼び出す.NETコードで、オブジェクトをxmlにシリアル化し、結果の文字列をWebサービスに渡します。

したがって、シリアル化されたオブジェクトを渡す代わりに、シリアル化されたオブジェクトのxmlを含む文字列を渡します。そして、それはうまくいくようです!

それは悪い解決策だと私は知っていますが、私は必死です。

于 2010-04-14T10:27:46.473 に答える
0

私は最近同様の問題に直面しました。私を助けてくれたリンクはほとんどありません。主なポイントは、VSではなくSVCUTILのようなツールを使用することです:

http://kjellsj.blogspot.com/2008/06/wcf-using-shared-types.html

http://msdn.microsoft.com/en-us/library/aa702581.aspx

于 2010-04-12T13:38:21.190 に答える