2012-02-20 6 views
2

現在、WCF SOAPサービスを呼び出すRESTプロキシを作成しようとしていますが、メッセージを送信するチャネルを作成しようとしています。私はChannelFactoryを使う必要があることを知っていますが、私はサービスのインターフェースを持っていません。私が渡すことができるデフォルト値はありますか?メッセージをパッケージ化する別の方法はありますか?ChannelFactory <T>インターフェイスなし

メッセージを言うとき、私はServiceModels.Channels.Messageからのメッセージを意味します。

私は非常にこれに新しいので、任意の助けに感謝します。

+1

あなたのWebサービスは、[REST *と*使用SOAPに基づい]の両方にすることはできません(http://geeknizer.com/rest-vs-soap-using-http-choosing-the-right-webservice-protocol)。どちらですか? –

+0

その理由は、そのプロキシは、残りの呼び出しを取り、残りの呼び出しからパラメータを取り出し、SOAPメッセージとしてパッケージ化し、SOAPサービスに送信し、応答を取得し、解析し、サービス – SmashCode

+0

私は参照してください。私は* proxy *という言葉を誤解していました。私はあなたがクライアント側のプロキシを意味していると思っていました:) SOAPサービスへのインターフェイスはありませんか? –

答えて

5

次の2つの方法のいずれかでWSDLサービス契約からgenerate a WCF client次のことができます。

いずれかの方法で生成されますsvcutilコマンドラインユーティリティを使用してVisual Studioの

  • Add Service Referenceダイアログを使用して

    • サービスコントラクトによって公開されるタイプに対応する.NETクラスとWCF client proxy class(サービス操作を呼び出すために使用できます):

      try 
      { 
          var client = new MyServiceClient(); 
          client.DoSomething(); 
          client.Close(); 
      } 
      catch 
      { 
          if (client != null) 
          { 
           client.Abort(); 
          } 
      } 
      

      あなたは低いレベルChannelFactory APIを使用する場合は、あなたが代わりに生成されたIClientChannelインタフェースを使用する必要があります。

      try 
      { 
          var factory = new ChannelFactory<MyServiceChannel>(); 
          var client = factory.CreateChannel(); 
          client.DoSomething(); 
          client.Close(); 
      } 
      catch 
      { 
          if (client != null) 
          { 
           client.Abort(); 
          } 
      } 
      
  • +0

    ありがとう、私は、サーバーからのソースへのアクセスを取得し、ちょうど私が必要なインターフェイスをコピーしましたが、私はこれを受け入れるので、私はwsdlを持っていた場合、これも同様に解決しているだろう。ありがとう。 – SmashCode

    +0

    @SmashCodeわかりました。あなたのコメントの中で、あなたがWSDL契約を結んでいると言ったと思いました。とにかく、私は助けることができてうれしいです:) –

    +0

    私は奇妙な、エンリコをその言葉を述べました。私はWSDLを持っていましたが、今はWSDLとソースを持っているので、WSDLの代わりにソースを使用しましたが、ソースがなくWSDLしかなければ答えがうまくいくはずでした。 – SmashCode

    2

    ChannelFactory.CreateChannelは、提供されたインターフェイスとIClientChannelを実装するオブジェクトを作成します。そのインターフェイスはサービスと一致する必要があります。

    サービスで使用するものと同じDLLを必要とする必要はありません。独自のインターフェイスを作成して、サービスの定義に合わせることができます。 ServiceContract属性で、NameとNamespaceをサービスの名前と名前に設定します。

    +0

    wsdlからこれを自動生成する方法はありますか? – SmashCode

    +0

    @SmashCodeはい、Visual Studioの**サービス参照の追加**ダイアログまたは** svcutil **コマンドラインユーティリティを使用します。 –

    関連する問題