質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
WCF

WCFは、.NET Frameworkの提供する機能の一つ。サービス指向アプリケーション構築のためのフレームワークです。ネットワークを通して、異なるコンピュータ上で動くソフトウェア間の通信が可能になります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

1回答

7493閲覧

WCFで組んだもののServiceをWebブラウザ上で動かす方法が知りたい

RI_KU

総合スコア24

WCF

WCFは、.NET Frameworkの提供する機能の一つ。サービス指向アプリケーション構築のためのフレームワークです。ネットワークを通して、異なるコンピュータ上で動くソフトウェア間の通信が可能になります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2017/03/17 12:49

◆Visual Studio 2010
◆.netFrameWork3.5

現在WCFRestServiceを使用してウェブブラウザから引数付きURLを受け付け、その引数を利用してDBを更新、DB処理がうまくいったかどうかの戻り値を返す処理を組んでいます。

が、、、
WCFサービスにhttp://localhost:ポート番号/Service.svc
WCFサービスにhttp://localhost:ポート番号/Service.svc?wsdl

まではネットで調べた通り下記参考先に添付されている画面と同様なものにつなげることができます。
**◆参考 一番下の画面の日本語Ver
単純な WCF サービスの実装
http://aspnet.keicode.com/basic/wcf-simple-service.php

しかしここから中のサービスを呼ぶことができません。
やりたいことの例を記します。
【ウェブブラウザからの入力値】
http://localhost:ポート番号/Service.svc/StatusUpdater/26/yamada/hanako

【C#】
UriTemplate="StatusUpdater/{age}/{myoji}/{name}"的なイメージ

【DataBase】
yamada hanakoさんの年齢を26に更新

Httpステータスコードを返す(正常終了:200, 異常:500...etc)

果たしてWebブラウザから引数付きのURLを入力しただけでプログラムを走らせることは可能なのでしょうか。。。IDEで実行してないので、まずデバッグができないですよね。
下記を参考にXMLページが返ってくるものをコピペで作り、コード中にdebaug.writeline(...)等書きましたが案の定デバッグしてないのでコンソールに出力されるはずもなく。。。
ましてや引数付URLを入力しただけで裏で処理が走りDBに接続して更新処理を行うなんてできるのでしょうか。

10 行でズバリ!! リモートからの SharePoint 接続 – REST の使用 (C#)
https://code.msdn.microsoft.com/office/10-SharePoint-REST-C-d76023f9

完全に詰まっております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/03/17 13:01

https://teratail.com/questions/69180 の退会済みユーザーさんの関係者または同一人物なのでしょうか? 違ったら失礼しました。
guest

回答1

0

自己解決

自己解決いたしました。
http://~/〇〇Service/引数/引数/引数
の形でURL渡してDBを更新し、HttpStatusCodeを返す処理を実装できました。

サービスのホスティングもConsoleApplicationからではなく、Webブラウザから行っています。
色々Googleで調べるとホスティングをConsoleApplicationから行っている人が多かったです。
ですが、WebAPIなのにConsoleApplicationでHostよんで処理させるってそもそもどうかと思うのですが。。。

肝心のウェブブラウザから接続する方法が全くなかったので、同じことで悩まれる方のためにもコード参考程度ですがのせます。

細かいロジックはこれから考えます。
回答は付きませんでしたが、これから同じことで悩む方のためにコードを載せておきます。

コード丸々載せてしまうと関係者に案件バレしてしまいそうなので、所々伏せているので
各自書き換えてください。

また、WCF Restのプロジェクトの作成方法は申し訳ありませんググってください。

またC#でStoredProcedureを実行し、戻り値を取得する処理も記述されているので参考程度に...

【環境】
Visual Studio 2010
SQLServer2014
HttpStatusCodeを使用するためにSystem.NET名前空間のusingが必要。

◆プロジェクト
【サービスインタフェース】

C#

1using System.ServiceModel; 2using System.ServiceModel.Web; 3using System.Net; 4using System.Collections.Generic; 5 6namespace 【namespace】 7{ 8 9 [ServiceContract] 10 public interface IService(先頭のIはInterfaceのI)" 11 { 12 [OperationContract] 13 [WebInvoke( 14 Method = "GET", 15 // BodyStyle = WebMessageBodyStyle.Wrapped, // 有:{"PjStrSttsUpdaterResult":HttpStatusCode} 無:HttpstatusCodeが表示される 16 ResponseFormat = WebMessageFormat.Json, // JsonをXmlに変えると、返却値がxml形式になる 17 UriTemplate = "{hikisuOne}/{hikisuTwo}/{hikisuThree}")] 18 HttpStatusCode ServiceMethod(string hikisuOne, string hikisuTwo, string hikisuThree); 19 20 } 21} 22

【サービス(Interfaceを実装している)】

C#

1using System; 2using System.Data; 3using System.Data.SqlClient; 4using System.Diagnostics; 5using System.IO; 6using System.Runtime.Serialization; 7using System.ServiceModel.Activation; 8using System.ServiceModel.Web; 9using System.Net; 10using System.Text; 11 12namespace 【namespace】 13{ 14 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 15 public class Service : IService 16 { 17 public HttpStatusCode ServiceMethod(string hikisuOne, string hikisuTwo, string hikisuThree) 18 { 19 #region 更新処理 20 using (SqlConnection cnn = 【Connectionの取得処理】) 21 { 22 HttpStatusCode httpReturnCode = HttpStatusCode.Continue; 23 string connectionString = string.Empty; 24 connectionString = "接続文字列"; 25 cnn.ConnectionString = connectionString; 26 cnn.Open(); 27 SqlCommand cmd = new SqlCommand(); 28 cmd.Connection = cnn; 29 cmd.CommandType = CommandType.StoredProcedure; 30 31 cmd.CommandText = "[sample].[プロシージャ]"; 32 cmd.Parameters.Clear(); 33 cmd.Parameters.Add("@hikisuOne", System.Data.SqlDbType.NVarChar).Value = hikisuOne; 34 cmd.Parameters.Add("@hikisuTwo", System.Data.SqlDbType.NVarChar).Value = hikisuTwo; 35 cmd.Parameters.Add("@hikisuThree", System.Data.SqlDbType.NVarChar).Value = hikisuThree; 36 37 cmd.Parameters.Add("ReturnValue", System.Data.SqlDbType.Int); 38 cmd.Parameters["ReturnValue"].Direction = System.Data.ParameterDirection.ReturnValue; 39 // 実行 40 cmd.ExecuteNonQuery(); 41 // 結果取得 42 int returnValue = (int)cmd.Parameters["ReturnValue"].Value; 43 // HttpStatusCode判定 44 switch (returnValue) 45 { // 200 46 case 1: 47 httpReturnCode = HttpStatusCode.OK; 48 break; 49 // 400 50 case 2: 51 httpReturnCode = HttpStatusCode.BadRequest; 52 break; 53 // 500 54 default: 55 httpReturnCode = HttpStatusCode.InternalServerError; 56 break; 57 } 58 return httpReturnCode; 59 #endregion 60 } 61 } 62 } 63} 64

◆Webサイト(サーバ)側
・ソリューション右クリック→追加→新しいWebサイト(W)で作成されるもの
【Global.asax】

C#

1<%@ Application Language="C#" %> 2 3<script runat="server"> 4 5 void Application_Start(object sender, EventArgs e) 6 { 7 // アプリケーションのスタートアップで実行するコードです 8 System.Web.Routing.RouteTable.Routes.Add( 9 new System.ServiceModel.Activation.ServiceRoute( 10 "Service", new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(【namespace】.Service))); 11 } 12 void Application_End(object sender, EventArgs e) 13 { 14 // アプリケーションのシャットダウンで実行するコードです 15 16 } 17 18 void Application_Error(object sender, EventArgs e) 19 { 20 // ハンドルされていないエラーが発生したときに実行するコードです 21 22 } 23 24 void Session_Start(object sender, EventArgs e) 25 { 26 // 新規セッションを開始したときに実行するコードです 27 28 } 29 30 void Session_End(object sender, EventArgs e) 31 { 32 // セッションが終了したときに実行するコードです 33 // メモ: Web.config ファイル内で sessionstate モードが InProc に設定されているときのみ、 34 // Session_End イベントが発生します。session モードが StateServer か、または SQLServer に 35 // 設定されている場合、イベントは発生しません。 36 37 } 38 39</script>

【Service.svc】

C#

1<%@ ServiceHost Service="【namespace】.Service"%>

【web.config】

C#

1<?xml version="1.0" encoding="utf-8"?> 2<configuration> 3 <system.web> 4 <compilation debug="true" targetFramework="4.0"/> 5 </system.web> 6 <!--<system.serviceModel> 7 <behaviors> 8 <serviceBehaviors> 9 <behavior name=""> 10 <serviceMetadata httpGetEnabled="true" /> 11 <serviceDebug includeExceptionDetailInFaults="false" /> 12 </behavior> 13 </serviceBehaviors> 14 </behaviors> 15 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 16 </system.serviceModel>--> 17 <system.serviceModel> 18 <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 19 <services> 20 <service name="【namespace】.Service" behaviorConfiguration="NewBehavior"> 21 <endpoint address="" behaviorConfiguration="ServiceBehavior" binding="webHttpBinding" bindingConfiguration="" contract="【namespace】.IService"/> 22 </service> 23 </services> 24 <behaviors> 25 <endpointBehaviors> 26 <behavior name="ServiceBehavior"> 27 <webHttp/> 28 </behavior> 29 </endpointBehaviors> 30 <serviceBehaviors> 31 <behavior name="NewBehavior"> 32 <serviceMetadata httpGetEnabled="true"/> 33 </behavior> 34 </serviceBehaviors> 35 </behaviors> 36 <bindings/> 37 </system.serviceModel> 38</configuration>

例:
http://localhost:Webサイトのポート番号/Webサイトの仮想パス/SVCファイル名.svc
でサービスが作成されたことを確認後、下記を入力
http://localhost:Webサイトのポート番号/Webサイトの仮想パス/Service*1/23/yamada/tarou
*1・・・Global.asaxでAddした文字列

Webサイトのポート番号, Webサイトの仮想パスはVS2010であれば、ソリューションエクスプローラ上でWebサイトをクリック又は右クリックをしてプロパティウィンドウから参照できます。

以上です。

投稿2017/03/21 04:56

RI_KU

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問