2011-07-29 13 views
1

これは本当にばかげた質問かもしれませんが、解決策を見つけることができませんでした。 SiteMinder認証を使用するサイトでホストされているWCFサービスがあります。認証はクライアント要求のクッキーに依存しています。問題は、svcutilを使用してプロキシクラスを生成しようとすると、svcutillがメタデータを取得しようとすると、要求にSiteMinderクッキーが追加されないためですWCFサービスプロキシクラスをプログラマチックに生成する簡単な方法があるかどうか疑問に思っていました。SiteMinderの保護されたサイトにWCFメタデータを公開する

答えて

1

コンパイル済みのサービスDLLファイルにアクセスできる場合は、the SvcUtil command line utilityを使用して、データコントラクト用のWSDLおよび関連するXSDを生成できます。このアプローチの主な問題は、schemaLocation属性値の各xsd:import要素に、SvcUtilによって生成されたXSDファイルの名前を追加する必要があることです。

以下は変更されたxsd:import要素のサンプルです。 "http://tempuri.org/"名前空間では、 "tempuri.org.xsd"の値を持つschemaLocation属性を追加して、サービス参照の追加プロセスでWSDLファイルと同じフォルダ内のそのファイルを探すようにしました。 WSDLでwsdl:importを代わりに使用する場合は、schemaLocation属性ではなくlocation属性を追加します。このrelated question and answerは良いスタートを与えるはずです。

<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> 

EDIT:

は、コンパイル済みのサービスのDLLを使用してクライアントのコードを生成する2段階のプロセスが必要です。 SvcUtilはクライアントを生成するためにサービスWSDLを必要とします。コンパイルされたDLLを直接使用することはできません。

まず、ServiceContractを含むDLLを使用してWSDLを生成します。サービス契約DLLが同じフォルダにある場合は、サービス実装ファイルを使用できると思います。

cd "\Path\To\Your\Service\DLLs" 
svcutil YourService.DLL 

サービスの構造によっては、複数のファイルが作成されます。 1つの.WSDLファイルと複数の.XSDファイルがあります。上記のようにこれらのファイルを編集します。

最後に、いずれかのクライアントコードを生成するか、次のようにSvcUtilを使用する(だけの完全なパスとファイル名を入力してください)編集した.WSDLファイルを選択するために、サービス参照の追加]ダイアログボックスのVisual Studioを使用します。

svcutil *.wsdl *.xsd /language:C# 
+0

私は私の質問では明確ではないかもしれません。私の問題は、SiteMinderで保護されているため、svcutilがメタデータに到達できないという事実です。 –

+0

SvcUtilコマンドラインでサービスMEX URLを使用していますが、これは気になる恐怖のために動作しません。サービスコントラクトを含むDLLを使用してWSDLを生成し、そこからクライアントを生成することをお勧めします。私はそれを明確にするために答えを更新します。 –

+0

ああ、今私はそれを得る:)おかげで束。 –

関連する問題