WCF入門例

14716 ワード

WCFの研究を始めたばかりで,ここではWCFを構築する実行環境を最も簡単な方法で構築することを試みた.一般的にWCFを使用するには2つの方法があり、1つは大きなバックグラウンドサービスを提供することであり、これは公網に公開される可能性があり、一般的にhttpプロトコルを使用して、宿主はIISの中に、それから別のAspを使用する.NetサイトやWPFなどのプログラムはクライアントとしてサービスを呼び出す.もう1つは内部通信に用いられ、一般的にホストはコンソールプログラムにテストを開発し、ホストはwindowsサービスに公開される.サービス構築プロセスを簡単なサービス例で説明します.
1.httpプロトコル、サービス側とクライアントはwebです.
1)vsで「WCF->WCFアプリケーション」テンプレートを選択して新規プロジェクトを作成します.
2)プロジェクト内に2つのフォルダを新規作成し、1つはDefがインタフェース定義クラスを置くために使用し、1つはImplがサービス実装クラスを置くために使用する.
3)DefにITimeServicesを追加する.cs、コードは以下の通りです.
     
    [ServiceContract]
public interface ITimeService
{
[OperationContract]
DateTime GetNow();
}

ここではネーミングスペースを省略し,認識しないタイプの右ボタンを解析する.次のコードは似ています.
4)ImplディレクトリにTimeServices 0を追加する.cs、コードは以下の通りです.
    public class TimeService0 : ITimeService
{
public DateTime GetNow()
{
return DateTime.Now;
}
}

5)プロジェクトを自動的に生成するIService 1.csを乾かし、Services 1をsvcの名前をTimeServicesに変更します.svc, TimeService.svc.csコードの変更は以下の通りです.
    
    [ServiceBehavior(Namespace="Services", Name="Time")]
public class TimeService : TimeService0
{
}

6)F 5を押してWCFサービスを起動すると、ブラウザがページをポップアップし、TimeService.svcをクリックすると、サービス説明が表示され、このアドレスは一般的にhttp://localhost:8481/TimeService.svc、ポートが変化する可能性があります.
7)新しいAsp.Net WebアプリケーションWcfClient、サービス参照を追加、アドレスはhttp://localhost:8481/TimeService.svc.
8)Default.aspxにラベルを追加:
9)バックグラウンドコードは以下のように修正される.
    
protected void Page_Load(object sender, EventArgs e)
{
TimeServiceClient timeServiceClient
= new TimeServiceClient();
txt1.Text = timeServiceClient.GetNow().ToString("yyyy MM dd hh mm ss ");
}

 
10)WcfサービスプロジェクトとAspを相次いで起動する.Netプロジェクト、Asp.Netプロジェクトのページには現在時刻が表示されるはずで、ページ更新時刻も更新されます.
11)配信時にIIS 7にサイトを追加し,サイト名を記入してWCFアプリケーションプロジェクトディレクトリに物理パスを設定すればよい.注意ディレクトリはIISユーザIIS_を付与する必要がありますIUSRS読み取りと実行権限は、次のリンクを参照して設定します.http://utervnx.blog.163.com/blog/static/14387703201052185627486/
2.tcpプロトコル、内部通信、サービス側とクライアントはコンソールプログラムであり、ここではwcfテンプレートを適用せず、コードを自動的に生成せず、完全に手作業で実現する.
1)クラスライブラリプロジェクトServiceInterface 1を新規作成し、システムに追加する.ServiceModelの参照.
2)ITimeServicesを追加する.cs、コードは以下の通りです.
    [ServiceContract]
public interface ITimeService
{
[OperationContract]
DateTime GetNow();
}

3)サービス側としてコンソールアプリケーションWinServices 1を新規作成し,ターゲットフレームを変更する.Net Framework 4は、Systemを追加する.ServiceModelの参照.
4)クラスTimeServicesを追加する.cs、コードは以下の通りです.
    public class TimeService : ITimeService
{
public DateTime GetNow()
{
return DateTime.Now;
}
}

5)Program.csにサービス起動コードを追加します.
   
        static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(TimeService)))
{
host.Open();
Console.WriteLine("Service starts.");
Console.ReadKey();
host.Close();
}
}

6)プロファイルapp.configは以下の通りです.
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<system.serviceModel>
<services>
<service name="WinService1.TimeService" behaviorConfiguration="WinService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/WinService"/>
<add baseAddress="net.tcp://localhost:8080/WinService"/>
</baseAddresses>
<timeouts openTimeout="00:01:00" closeTimeout="00:01:00"/>
</host>
<endpoint name="TimeService" address="TimeService" binding="netTcpBinding" contract="ServiceInterface1.ITimeService"/>
<endpoint address="mex" binding="mexTcpBinding" name="MEX" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WinService">
<serviceDebug includeExceptionDetailInFaults="True"/>
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

7)さらにコンソールアプリケーションWinServices 1 Clientをクライアントとして新規作成し,ターゲットフレームワークを変更する.Net Framework 4は、Systemを追加する.ServiceModelの参照.
8)TimeServiceClientを追加する.cs:
    class TimeServiceClient : ClientBase<ITimeService>, ITimeService
{
public System.DateTime GetNow()
{
return base.Channel.GetNow();
}
}

  9)Program.csコード:
        static void Main(string[] args)
{
TimeServiceClient client = new TimeServiceClient();
Console.WriteLine(client.GetNow());
Console.ReadKey();
}

10)プロファイル:
    
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<system.serviceModel>
<client>
<endpoint address="net.tcp://localhost:8080/WinService/TimeService"
binding
="netTcpBinding" contract="ServiceInterface1.ITimeService" name="TimeService">
</endpoint>
</client>
</system.serviceModel>
</configuration>

 
11)サーバーとクライアントを前後して起動し、クライアントは現在の時間を表示すべきである.