6

サードパーティがホストする SOAP Web サービスにアクセスするためのクライアントを作成しています。インターフェイスとデータを定義する WSDL と XSD があります。

WSDL からサービス参照を作成する際には問題はありませんでしたが、それを実装する単純な Web サービスを構築する際に問題があり、テストに使用できます。(サードパーティのサービスはまだ準備ができていませんが、実行されていたとしても、彼らのサーバーではなく、自分のテスト サーバーに対して初期テストを行いたいと考えています。)

私はブラウジングしましたが、どうやら svcutil を使用してサービスのインターフェースを生成できるようです:

svcutil.exe thewsdl.wsdl thexsd.xsd /language:c# /out:ITestService.cs

これにより、サービス インターフェイス定義を含むファイルが生成されます。しかし、今は何ですか?

セルフホステッド サービスを構築するのが最も簡単な方法だと考えたので、新しいコンソール アプリを作成し、その中でサービス インターフェイス定義から派生したクラスを実装し、ServiceHost で起動しました。

それが実行され、実行中にクライアント アプリでサービス リファレンスを作成できました。しかし、クライアント アプリから呼び出そうとすると、エラーが発生します。

The provided URI scheme 'http' is invalid; expected 'https'.

これを回避する最も簡単な方法は何ですか? 認証と承認をオフにして、無制限のアクセスを許可する簡単な方法はありますか?

編集:

元の質問が注目されていないように見えるので、これに報奨金を追加します。

しかし、核心に行きましょう。顧客の SOAP サービスに対してクライアントを作成しようとしています。開発の一環として、同じ WSDL を実装する独自のテスト WCF サービスを作成したいと考えています。

ダウンロードした .wsdl ファイルと関連する .xsd ファイルがあり、それらを使用して、VS2010 のデバッガーでテストできるサービスを作成したいと考えています。

このサービスがスタンドアロンで実行されるか、IIS 内で実行されるか、または運用が安定しているかどうかは、私にとって重要ではありません。私が必要としているのは、顧客のサイトが受け入れる要求を受け入れ、要求の処理をテストするために、返す必要がある応答をクライアントに返すサービスだけです。

どうやってそこまで行くの?WCF サービス ライブラリを追加してから、その中で svcutil.exe を使用して新しいサービスを追加しようとしましたが、app.config にサーバー側のボイラープレートが設定されていないようで、それを再構築しようとすると失敗しましたうまくいきませんでした。

4

2 に答える 2

5

モックするのではなく、本格的なサービスを呼び出す必要があるためです。

次の手順を実行します:

  1. 新しい「WCF サービス アプリケーション」プロジェクトを作成する
  2. プロジェクトに wsdl と xsd をコピー
  3. wsdlファイルを選択し、プロパティセクションを見て、フルパスから場所をコピーします
  4. ソリューション エクスプローラーでプロジェクトを右クリックし、[サービス参照の追加...] を選択します。
  5. サービス アドレスについては、前の手順でコピーした wsdl の場所を貼り付けて [go] をクリックします。サービスに期待する操作が表示されます。
  6. 大丈夫
  7. インターフェイスと構成ファイルを含むすべてのオブジェクトを生成する必要があります(ただし、この時点では構成のクライアント側です-これをサービスに切り替える必要があります)
  8. ここで、system.serviceModel セクションにサービス構成セクションを追加する必要があります。wsdl の詳細がわからないので、system.serviceModel セクション内にサービス ノードを作成し、生成されたクライアント ノードからエンドポイント ノードをコピーする必要があります。以下のサービス ノードの例では、今のところアドレスを空白にすることができます。
 <system.serviceModel>
    <services>
      <service name="YourService">
        <endpoint address=""
               binding="basicHttpBinding" bindingConfiguration="WeatherSoap"
               contract="ServiceReference1.WeatherSoap" name="WeatherSoap" />      
      </service>
  1. 設定でクライアント ノードを削除します
  2. サービスでは、プロジェクトを生成したときに別のインターフェイスを実装しているため、実装されているインターフェイスを上記のエンドポイントのコントラクト属性にリストされているインターフェイスに置き換える必要があります。次に、そのメンバーを実装すると、使用可能な操作が展開されます。サービス操作で返してほしいものは何でも入力できます。
  3. wsdl の内容によっては、wsHttpbinding や netTCPbinding などの設定など、必要なバインドを実行できるようにするために、さらにいくつかの作業が必要になる場合があります。
于 2012-07-04T05:19:01.113 に答える
1

これを処理するためにMoqを使用しました。基本的に単体テストでは、インターフェース (サービス参照を追加するか、svcutil を使用して生成されます) と、それを呼び出した場合に返すものを指定します。

以下の設定例:

var mock = new Mock<IFoo>();
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);

それで、あなたがあなたのサービスコールをmoqしたいとき

var myObject = new IFoo;
var resp = myObject.DoSomething("whateverwillbeoverriddenbyping");

resp は true になります。

Moq を使用する以外のオプションがあります。オプションにはすべて、インターフェイスを取得して、別のバージョンを挿入することが含まれます。たとえば、インターフェイスをクラス コンストラクターに渡すことで、コンストラクター インジェクション モックを実行することもできます。

于 2012-07-03T06:59:31.957 に答える