web-dev-qa-db-ja.com

ASP.NET 5は、WCFサービス参照を追加します

Visual Studio 2015 Preview(プレリリース)で、WCFサービスのサービス参照を追加するにはどうすればよいですか?

26
heymega

現在、これはかなり複雑なプロセスです。ツールは、WCFクライアントコードを生成したり、構成ファイルから自動的にマップしたりする方法をあまりサポートしていないようです。また、dotnetstepが指摘したように、ASP.NETチームはSystem.ServiceModelをまだ5に移植していません(またはWCFクライアントに代替を提供しましたyet)。それでも、コードベースのアプローチを使用してクライアントプロキシを作成し、 svcutil を使用してサービス参照クラスを生成できます。

ソリューションの前提条件

この例では、IMapServiceコントラクトを実装する http:// localhost:5000/MapService.svc でサービスをローカルでホストしていると仮定します。また、サービスプロキシMapClientを含むプロジェクトを呼び出します。

project.jsonは次のようになります。

{
    "commands": {
        "run": "run"
    },
    "frameworks": {
        "dnx451": {
            "dependencies": {
                "Microsoft.AspNet.Mvc": "6.0.0-beta2"
            },
            "frameworkAssemblies": {
                "System.ServiceModel": "4.0.0.0"
            }
        }
    }
}

サービス参照クラスを生成する

まず、MapClientプロジェクトにフォルダーService Referencesを作成しましょう。

次に、VS2015の開発者コマンドプロンプトを開き、MapClientプロジェクトディレクトリに移動します。

cd "C:\Users\youraccount\Documents\Visual Studio 2015\Projects\MapClient\src\MapClient"

MapServiceが実行されていることを確認し、次のコマンドを実行します。

svcutil /language:cs /out:"Service References\MapServiceReference.cs" http://localhost:5000/MapService.svc

これにより、output.configMapServiceReference.csの2つのファイルが生成されます。

コードベースのクライアントプロキシを作成する

automagicallyエンドポイントとバインディング構成を構成ファイルから現在ASP.NET 5にあるClientBaseにマップする方法がないため、output.configはあまり役に立ちません米国。削除できます。

代わりに、コードでクライアントプロキシを作成しましょう。

using System.ServiceModel;

namespace TestWCFReference
{
    public class Program
    {
        public void Main(string[] args)
        {
            var endpointUrl = "http://localhost:5000/MapService.svc";
            BasicHttpBinding binding = new BasicHttpBinding(); 
            EndpointAddress endpoint = new EndpointAddress(endpointUrl);
            ChannelFactory<IMapService> channelFactory = new ChannelFactory<IMapService>(binding, endpoint);
            IMapService clientProxy = channelFactory.CreateChannel();

            var map = clientProxy.GetMap();

            channelFactory.Close();
        }
    }
}

これで、clientProxyインスタンスを使用して、IMapServiceの任意のOperation Contractにアクセスできます。

補足として、おそらくバインディングとエンドポイントの構成を格納するkey:value構成ファイルを作成し、 Microsoft.Framework.ConfigurationModel.Configuration オブジェクトを使用してChannelFactoryので、サービス構成をコードから外すことができますが、この例で開始できることを願っています。

41
Carrie Kendall

以前のバージョンと同様に、サービス参照を追加および使用できる新しいVisual Studio拡張機能があります。また、新しいCoreCLRとの互換性もあり、テストしたばかりです。

http://blogs.msdn.com/b/webdev/archive/2015/12/15/wcf-connected-service-visual-studio-extension-preview-for-asp-net-5-projects。 aspx

9
wodzu

Edit:他の回答に掲載されている接続サービスを追加するための新しい拡張機能はまだ機能しませんでしたが、dnxcore50を使用しません:

  • サービス参照を保持するクラスライブラリを用意します(使用するフレームワーク<= aspnet5を選択します(例:dnx451))
  • 参照を右クリックしてaspnet5にそれを参照してください(すべてのラップのものを作成します)
  • Project.jsonの「framework」セクションにサービスモデルと必要なシリアル化dllがある(dnxcoreを削除する必要がある)

         "dnx451": {
           "dependencies": {
            "YourClassLibWillAppearHere": "1.0.0-*" // after you reference it
           },
           "frameworkAssemblies": {
            "System.ServiceModel": "4.0.0.0",
            "System.ServiceModel.Http": "4.0.0.0",
            "System.Runtime.Serialization": "4.0.0.0"
           }
         }   
    

あなたはそれを必要とする場所でできるはずです:

using YourNameSpace.ServiceReference

古い回答

これは私のために働いた:

次のリンクの beta4 の既知の問題(ページ「WCF」を参照)の下にある両方の指示を同時に実行しました。

https://github.com/aspnet/Home/releases

so my steps where

  1. service reference another projectに追加しました(クラスライブラリまたはWindows 8.1 univアプリを推奨)
  2. 参照クラスをASP.NET 5プロジェクトにコピーしました
  3. 全体をコピーしました

    <system.serviceModel>...

    app.configからweb.config

  4. project.jsonの上記のリンクから不足しているすべての依存関係リストを、共通の依存関係の下にコピーし、特定のフレームワークを残します(aspnetフレームワーク依存関係としてのdotnet4.6クラスライブラリは、そのフレームワークで多くの欠落している型を与えました

"dependencies": { >> here << }

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  }
3
vinjenzo

これを行うための別の潜在的な方法は、dllプロジェクトをソリューションに追加し、通常どおりにサービス参照をここに追加することです-MVCプロジェクトにdllを含め、サービスの参照を追加します。

App.configの内容をmvcプロジェクトのapp.configにコピーする必要があります-はい、web.configではなくapp.configです。

完了

3
Monolithcode

現在、これに使用できるツールはなく、asp.netcore5にはないこのSystem.ServiceModelの考えられる理由があります。

ASP.net 5を使用することにした場合、WCFサービスを使用するために、今のところ次のことを行うことができます(この回答にはVisual Studio 2015 CTP 5を使用しています)

VS 2015 CTP 5では、通常のクラスライブラリの参照を追加できます。

  1. WCFサービスを作成します。
  2. 通常のクラスライブラリの作成(.NET Framework 4.6を選択)
  3. その後、WCFサービス参照をClassLibraryに追加しました。
  4. ClassLibraryをASP.net 5 Webサイトへの参照として追加します。 (CoreCLRフレームワークはSystem.Serviceモデルをサポートしていないため、project.jsonから削除しました)project.jsonのフレームワーク部分。

    "frameworks": {
    "aspnet50": {
        "frameworkAssemblies": {
             "System.ServiceModel": ""
         },
        "dependencies": {
             "ClassLibrary2": "1.0.0-*"
         }
       }
    },
    
  5. ここで、classlibraryプロジェクトを見ると、app.configファイルが含まれています。
  6. そのファイルをコピーして、ASP.net Webサイトプロジェクト(vnext)のwwwrootフォルダーに入れます。
  7. 名前をweb.configに変更します。

次に、アプリケーションを実行します。

3
dotnetstep