[解決済み] WCFサービスのREST / SOAPエンドポイント
質問
私はWCFサービスを持っており、それをRESTfullサービスとSOAPサービスの両方として公開したいと思っています。 このようなことを行ったことのある人はいますか?
どのように解決するのですか?
2つの異なるエンドポイントでサービスを公開することができます。 SOAPの方はSOAPをサポートするバインディング(例:basicHttpBinding)を、RESTfulの方はwebHttpBindingを使用することができます。RESTサービスはJSONであると仮定して、その場合、次のような動作設定で2つのエンドポイントを構成する必要があります。
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
あなたのシナリオにおけるエンドポイント設定の例は次のとおりです。
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" contract="ITestService"/>
</service>
</services>
で、サービスが利用できるようになります。
操作コントラクトに[WebGet]を適用して、RESTfulにする。 例
public interface ITestService
{
[OperationContract]
[WebGet]
string HelloWorld(string text)
}
RESTサービスがJSONでない場合、操作のパラメータに複合型を含めることができないので注意してください。
SOAPとRESTfulなPOX(XML)のための投稿への返信
返送形式がプレーンオールドXMLの場合、これはSOAPとXMLの両方で動作する例です。
[ServiceContract(Namespace = "http://test")]
public interface ITestService
{
[OperationContract]
[WebGet(UriTemplate = "accounts/{id}")]
Account[] GetAccount(string id);
}
RESTにおけるPOXの動作 プレーンオールドXML
<behavior name="poxBehavior">
<webHttp/>
</behavior>
エンドポイント
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
</services>
でサービスを提供する予定です。
RESTリクエスト ブラウザで試してみてください。
<ブロッククオートhttp://www.example.com/xml/accounts/A123
SOAPリクエスト サービスリファレンスを追加した後のSOAPサービスのクライアントエンドポイントの設定。
<client>
<endpoint address="http://www.example.com/soap" binding="basicHttpBinding"
contract="ITestService" name="BasicHttpBinding_ITestService" />
</client>
C# で
TestServiceClient client = new TestServiceClient();
client.GetAccount("A123");
もう一つの方法は、2つの異なるサービス・コントラクトを公開し、それぞれに特定の設定を行うことです。これはコードレベルで重複を発生させるかもしれませんが、最終的にはそれを動作させたいと思うでしょう。
関連
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み] デフォルトのエンドポイント要素が見つからない
-
[解決済み] Windows 7のsvcutil.exeはどこにあるのですか?
-
[解決済み] WCFメタデータに解決できない参照が含まれている
-
[解決済み] ActionScript 3 で SOAP ウェブサービスに "Null" (本当の苗字!) を渡す方法
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法
-
[解決済み】WCFとASMXのWebサービスの違いは何ですか?
-
[解決済み】Windows 8のIISでWCFサービスを提供できない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Windows 7のsvcutil.exeはどこにあるのですか?
-
[解決済み] WCFメタデータに解決できない参照が含まれている
-
[解決済み] w3wp.exeとは何ですか?
-
[解決済み] REST API / ウェブサービスを保護するためのベストプラクティス [終了しました]。
-
[解決済み] WCFサービスのREST / SOAPエンドポイント
-
[解決済み】WCFとASMXのWebサービスの違いは何ですか?
-
[解決済み】WCFサービスからきれいなJSONを返すにはどうすればいいですか?
-
[解決済み] WcfTestClient.exe (Visual Studioの一部)はどこにありますか?
-
[解決済み] WCFトレースをオンにするには?
-
[解決済み] WCFサービスのタイムアウト値を増加させる