◆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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア24
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。