Visual Studio 2015 Preview(プレリリース)で、WCF
サービスのサービス参照を追加するにはどうすればよいですか?
現在、これはかなり複雑なプロセスです。ツールは、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.config
とMapServiceReference.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
ので、サービス構成をコードから外すことができますが、この例で開始できることを願っています。
以前のバージョンと同様に、サービス参照を追加および使用できる新しいVisual Studio拡張機能があります。また、新しいCoreCLRとの互換性もあり、テストしたばかりです。
Edit:他の回答に掲載されている接続サービスを追加するための新しい拡張機能はまだ機能しませんでしたが、dnxcore50を使用しません:
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:
全体をコピーしました
<system.serviceModel>...
app.configからweb.config
project.jsonの上記のリンクから不足しているすべての依存関係リストを、共通の依存関係の下にコピーし、特定のフレームワークを残します(aspnetフレームワーク依存関係としてのdotnet4.6クラスライブラリは、そのフレームワークで多くの欠落している型を与えました)
"dependencies": { >> here << }
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
これを行うための別の潜在的な方法は、dllプロジェクトをソリューションに追加し、通常どおりにサービス参照をここに追加することです-MVCプロジェクトにdllを含め、サービスの参照を追加します。
App.configの内容をmvcプロジェクトのapp.configにコピーする必要があります-はい、web.configではなくapp.configです。
完了
現在、これに使用できるツールはなく、asp.netcore5にはないこのSystem.ServiceModelの考えられる理由があります。
ASP.net 5を使用することにした場合、WCFサービスを使用するために、今のところ次のことを行うことができます(この回答にはVisual Studio 2015 CTP 5を使用しています)
VS 2015 CTP 5では、通常のクラスライブラリの参照を追加できます。
ClassLibraryをASP.net 5 Webサイトへの参照として追加します。 (CoreCLRフレームワークはSystem.Serviceモデルをサポートしていないため、project.jsonから削除しました)project.jsonのフレームワーク部分。
"frameworks": {
"aspnet50": {
"frameworkAssemblies": {
"System.ServiceModel": ""
},
"dependencies": {
"ClassLibrary2": "1.0.0-*"
}
}
},
次に、アプリケーションを実行します。