4

Webサービスで問題が発生しています。私の通常の開発アプローチは、次のようなクラスを作成することです。

namespace Project.Entities
{
    public class Entity
    {
        //Some Members        
    }
}
namespace Project.Service
{
    public class EntityService
    {
        public Project.Entities.Entity Get(int EntityID); 
        // More Methods to retrive Entities
    }
}

これは、アプリケーション/Webサイトがデータベースへの直接アクセスを許可されている場合に問題なく機能します。次に、Webサービスを介してProject.Serviceメソッドを公開する必要があります。

namespace Project.API
{
    public class EntitiyWebService
    {
        [WebMethod()]
        public Project.Entities.Entity Get(int EntityID)
        {
            return new Project.Service.EntityService(EntityID);
        }
    }
}

私の問題は、(Project.Entitiesを使用する)別のアプリケーションからWebサービスを呼び出すと、に変換できないProject.Entities.EntityことProject.API.EntityWebService.Entityです。コンパイラに関する限り、これら2つのクラスには名前以外に共通点がないため、これがコンパイルされない理由は理解できたと思います。

私が本当に知る必要があるのは、悪い習慣のためにこの問題が発生したかどうか、そしてできるだけ早く再設計を開始する必要があるかどうか、またはそれについて心配する必要がなく、アプリで参照をからに変更するだけであるかどうかです(確かにこれは可能ですEntities.EntityAPI.EntityWebService.Entity最善の解決策です)、またはアプリとWebサービスの両方が同じDLLを使用するため、変換メソッドを作成する方法は、変換が必要なWebサービスを紹介するだけです。または、正しいアイデアが間違って実装されている場合、または何かを見逃している場合。または上記のどれも...

WebサービスをXMLを返すだけにして、アプリ内で結果をシリアル化することを検討しましたが、これは、より良い解決策があるはずの何かへの長い道のりのアプローチのようです。何かアドバイスをいただければ幸いです。

4

2 に答える 2

5

Web サービスを扱う場合、.net にカスタム オブジェクトの通常のシリアル化/逆シリアル化を行わせないというアプローチをとっています。

代わりに、JSON を使用してすべてを渡します。シリアライゼーション/デシリアライゼーションのプロセスを非常にスムーズにする標準的なツールがあります。http://json2csharp.com/http://json.codeplex.com/など

いくつかの理由があります。1 つ目は、JSON などの標準を使用することで、そこにあるほとんどすべてのものがそれを消費できることです。第二に、XML は厄介です... 非常に厄介です。また、正しく行うのは難しく、間違って行うのは非常に簡単です。第三に、正確な出力を制御するのがずっと簡単になりました。

最後に、JSON オブジェクトの受け渡しに関する興味深い点は、プロバイダーで新しいフィールドを追加し、後でコンシューマーを変更できることです。とても寛大です。

于 2012-05-08T22:22:45.030 に答える
2

WCF の使用を開始する必要があります。

WCF では、DataContracts を使用して必要なデータを公開できます。

シリアライズとデシリアライズはすべて自動的に行われ、追加の作業なしでクライアントとサーバーで同じ型を取得できます。

于 2012-05-08T22:37:57.727 に答える