fc2ブログ

記事一覧

WCFサービスの作成方法 | asp.net


今回は asp.net の WCF サービス について覚え書きします。WCF サービスでは従来のWEB サービスを手軽に実装できるだけでなく、VB からはもちろんのこと、aspx ページ等の JavaScript から呼び出したり、別のサイトから URL 経由で呼び出すことも簡単にできるようになっています。GET や POST にも対応していますので、次回は JSON 文字列を GET や POST で送受信する方法についても覚え書きしたいと思います。


前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2010 Professional 以降
・VB.NET
・.Net Framework 4.0 以降



1.WCFサービスを追加する

Webサイトのプロジェクトの任意のフォルダにファイルを追加します。
WCFサービス(Ajax対応)を選択します。

aspnet_wcfservice_01.png


WCFサービスを追加するとSVCファイル以外にも Web.Config にも自動で変更が反映されます。

Web.Config
  <system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="AspNetTest.TestServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="AspNetTest.TestService">
<endpoint address="" behaviorConfiguration="AspNetTest.TestServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="AspNetTest.TestService" />
</service>
</services>
</system.serviceModel>


Web.Config にエンドポイントを実装しない場合は、svc ファイルを右クリックして、マークアップの表示を選択します。以下のように Factory の設定を追加します。

TestService.svc
  <%@ ServiceHost Language="VB" Debug="true" 
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
Service="AspNetTest.TestService" CodeBehind="TestService.svc.vb" %>




2.WCFサービスの中身を実装

実際に呼び出す予定の関数の中身を実装します。WCFサービスを追加した時点でファイルは出来上がっていますので、編集するだけです。ここでは引数の文字列に文字列を追加した文字列を返却するだけの簡単な関数にしています。

TestService.svc.vb
Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web

<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class TestService

<OperationContract()>
Public Function GetTestService(ByVal text As String) As String

Return "WCFサービスの受信結果:" + text

End Function

End Class



3.JavaScriptから呼び出す

実装したWCFサービスの関数を JavaScript から呼び出す方法です。ASPXページ等に埋め込みができますので、簡単に実装できます。
ここでは、ScriptManagerにWCFサービスを定義し、JavaScript でコールした結果を jQuery で input (テキストボックス)にセットしています。

WcfServiceTest.aspx
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WcfServiceTest.aspx.vb" Inherits="AspNetTest.WcfServiceTest" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style>
.inner {
margin: 30px;
}
.text {
height: 32px;
font-size: 28px;
width:500px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WcfService/TestService.svc" />
</Services>
</asp:ScriptManager>
<div class="inner">
<input type="text" class="result text" />
</div>
<script src="/App_Themes/default/scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
var text = "テスト";
var test = new TestService().GetTestService(text, function (result) {
$('.result').val(result);
});
});
</script>
</form>
</body>
</html>



4.JavaScriptの実行結果

実行結果をブラウザで確認します。関数に設定した文字列通りの値が画面に表示されています。

aspnet_wcfservice_02.png



5.URLで呼び出す方法

以下のような URL から WCF サービスの関数の結果を取得することができますが、設定を変更しないと「メソッドは許可されていません」と表示されます。

http://ドメイン/フォルダ/svcファイル名/関数名?引数名=値
例:http://localhost:99999/wcfservice/testservice.svc/GetTestService?text=test

そこで、GETメソッドに変更します。WCFサービスで実装した関数にWebGet属性を付けるだけで、簡単です。

TestService.svc.vb
Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web

<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class TestService

<OperationContract()>
<WebGet()>
Public Function GetTestService(ByVal text As String) As String

Return "WCFサービスの受信結果:" + text

End Function

End Class



6.GETの実行結果

URL 指定で GET の実行結果が以下のように JSON で取得できます。

aspnet_wcfservice_03.png



7.本番サイトへの反映方法

本番のサイトではSSLになっていたり、テストサイトではBasic認証がかかっていたりします。そうするとWCFサービスは正しく動作しませんので、サイトの構成により以下のように Web.Config に system.serviceModel を追記します。

Web.Config
<configuration>
<system.web>
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding>
<!--HTTPSの場合に必要 -->
<security mode="Transport">
<!-- 基本認証がある場合に必要 -->
<transport clientCredentialType="Basic" />
</security>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
</configuration>




以上で WCF サービスが実装できました。JavaScript や GET で実行できますので、不必要なポストバック無しに VB や DB 等の値を取得することができますので、レスポンス的に優れていますね。






最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。



関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。