2010-12-05 14 views
1

WCFサービスに他の言語(Java、PHP、iOSなど)からアクセスできるようにするにはどうすればよいですか?複数のエンドポイントへのWCFサービス

私はすべてをhttpbindingとして保存し、クライアントの.netロール/メンバーシップ認証を使用していません。しかし、私にはわからないことがいくつかあります。同様に、他の言語で読める汎用リストを返すことはできますか?

答えて

1

net(netTcp、netMsmqなど)で始まらないWCFバインディングはすべて相互運用可能に設計されています。

最も基本的なものはbasicHttpBindingです。これはかなり単純なHTTPです。何も追加することはできません。任意のスクリプト言語(PHPなど)から呼び出すことができるはずです。

より高度な結合は、WS- *標準の多くを実装し、*ネットワークスタックは、WS-を扱うことができ、他の言語から呼び出すことができwsHttpBindingです - Javaのようなものなど

そしてwebHttpBindingがありますSOAPを介さずにRESTエンドポイント経由でサービスを公開します。これは、あらゆる言語、デバイス、場所から呼び出すことができます。

もちろん、サービスから複数のエンドポイントを公開して、あなたに電話をかけようとしている人にさまざまな選択肢を提供すると、あなたは最高のカバレッジを得ることができます。このすべてが、設定で簡単に実行されません - 必要なしコード変更を複数のエンドポイントをサポートするために、など複数のバインディングのリストやものについては

:WCF交換シリアル化されたメッセージ - 基本的にXML - XMLスキーマによって支配されています。 WSDLとXSDの組み合わせは完全に相互運用可能であり、多種多様な言語で理解することができます。

.NETのList<T>はXML構造の配列に変換され、完全に相互運用できます。心配する必要はありません。クライアントはリストの代わりに配列を返すかもしれませんが、それは問題ではありません。

リストをモデリングできないという唯一の問題は、XMLスキーマがジェネリックをサポートしていないためです。返信先は明示する必要があります。 List<T>は機能しません - List<Customer>は(Customerオブジェクトがデータ契約の一部であり、そのようにマークされている場合)

+0

ありがとうございます。オブジェクトをデータコントラクトの一部としてマークするにはどうすればよいですか? – Matt

+0

@Matt:クラスに '[DataContract]'属性を置き、 '(DataMember)'で直列化する必要があるすべてのメンバーを飾ります。 –

+0

ありがとう、ありがとう。 – Matt

1

サービスの消費に使用されるクライアントテクノロジを制御できない場合は、100%確実にすることはできません。しかし、あなたのWebサービス(WSDL)がWS-I basic profile v1.1に準拠しているなら、あなたは非常に自信があります。この規格は非常に広く支持され、成熟しています。優れたSoapUIテストツールを使用して、WSDLの適合性をテストすることができます。

関連する問題