2011-02-28 6 views
1

私のwebserviceでタイプIcon(他のタイプの中でも特に)のプロパティを保持するクラスを持つdllを参照しています(とDateTime)。 UnitTestプロジェクトでサービス参照を作成すると、次のエラーが発生します。Webサービスで、タイプアイコンのプロパティを持つクラスを参照しています

エラー:

ISerializable type with data contract name 'Icon' in namespace 'http://schemas.datacontract.org/2004/07/System.Drawing' cannot be imported. The data contract namespace cannot be customized for ISerializable types and the generated namespace 'KoenHoefman.ExchangeRate.WS.NUnit.QueryService' does not match the required CLR namespace 'System.Drawing'. Check if the required namespace has been mapped to a different data contract namespace and consider mapping it explicitly using the namespaces collection.

私はそれはいくつかの変更を行うことが可能ですので、このDLLのソースコードへのアクセス権を持っていますが、これらの変化は非常に最小限にすべきです。クラスにはSerializableというアトリビュートが付けられています。これはおそらく以前のエラーを示しています。この属性を削除すると、DataContractAttributeでクラスをマークし、DataMemberAttributeでメンバーをマークしなければならないという別のエラーが発生しました。

これは、このクラスがほとんど(今度は)Webサービスではほとんど使われないので、私にとっては大きな変化があります。私はまだこれを試していないが、私の問題の別の解決方法があるのだろうかと思っていた。

ありがとうございました。

答えて

1

このクラスは、問題のあるクラスをラップして必要なプロパティを公開する別のクラスを作成することをお勧めします。このクラスにDataContractAttributeを注釈する必要があります& DataMemberAttribute - 契約する。

アイコンが移動する限り、Webサービス経由でアイコン情報を転送/公開する必要があるかどうかを判断する必要があります。はいの場合、byte[](またはbase64でエンコードされた文字列)のプロパティを公開してアイコンデータを送信できます。

+0

アイコンについて:私はそれが正しくないと知っていますが、この方法では、私のアプリはこのDLLを既に使っている他のアプリと同じアイコンを保持しています。私はあなたの助言に従って、Iconの代わりにプロパティバイト[]を持つラッパークラスにしました。 – Koen

+0

フォローアップの質問:なぜサービス契約に明示的に印を付けるのが良い考えですか?私はこれまで決してしなかったし、決して問題に遭わなかった。それには特別な理由があるのでしょうか、あるいは単に「良い実践」ですか? (後者は私がそれをやり遂げるのに十分な理由ですが、別のものがあるかもしれません) – Koen

+0

@Koan、あなたの契約書はオプトインモデルです。つまり、契約の一部として公開されている各プロパティは、あなたの意思決定です。特定のプロパティ/メンバーを公開していない可能性があります。または、異なる名前(データコントラクト)の特定のプロパティを公開することができます。これにより、実装およびインターフェイス/契約に同じクラスを使用できます。このようなシナリオは、サービスが変更されても実装を変更できますが、契約を同じに保つことができます。 – VinayC

関連する問題