これは本当にばかげた質問かもしれませんが、私は解決策を見つけることができませんでした。SiteMinder認証を使用するサイトでホストされているWCFサービスがあります。認証はクライアントリクエストのCookieに依存しています。問題は、svcutilを使用してプロキシクラスを生成しようとすると、svcutillがメタデータを取得しようとしたときに、SiteMinder Cookieがリクエストに追加されないため、操作が失敗することです。したがって、プログラムでWCFサービスプロキシクラスを生成する簡単な方法があるかどうか疑問に思いました。
1 に答える
コンパイルされたサービス DLL ファイルにアクセスできる場合は、SvcUtil コマンド ライン ユーティリティを使用して、データ コントラクト用の WSDL および関連する XSD を生成できます。このアプローチの主な欠点は、SvcUtil によって生成された XSD ファイルの名前を、schemaLocation 属性値の各 xsd:import 要素に追加する必要があることです。
以下は、変更された xsd:import 要素のサンプルです。「http://tempuri.org/」名前空間の場合、「tempuri.org.xsd」の値を持つ schemaLocation 属性を追加して、サービス参照の追加プロセスが WSDL と同じフォルダーでそのファイルを検索することを認識できるようにしました。ファイル。WSDL で代わりに wsdl:import を使用する場合は、schemaLocation 属性の代わりに location 属性を追加します。この関連する質問と回答は、良いスタートを切るはずです。
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import namespace="http://tempuri.org/" schemaLocation="tempuri.org.xsd" />
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" />
</xsd:schema>
</wsdl:types>
編集:
コンパイルされたサービス DLL を使用してクライアント コードを生成するには、2 段階のプロセスが必要です。SvcUtil は、クライアントを生成するためにサービス WSDL を必要とします。コンパイルされた DLL を直接使用することはできません。
まず、ServiceContract を含む DLL を使用して WSDL を生成します。サービス契約DLLも同じフォルダにあればサービス実装ファイルが使えると思います。
cd "\Path\To\Your\Service\DLLs"
svcutil YourService.DLL
これにより、サービス構造に応じていくつかのファイルが作成されます。1 つの .WSDL ファイルといくつかの .XSD ファイルがあります。上記のようにこれらのファイルを編集します。
最後に、Visual Studio の [サービス参照の追加] ダイアログを使用して編集済みの .WSDL ファイルを選択し (完全なパスとファイル名を入力するだけ)、クライアント コードを生成するか、次のように SvcUtil を使用します。
svcutil *.wsdl *.xsd /language:C#