コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
Option Explicit On
Option Strict On
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports BaseLibrary.Library
Imports AspNetTest.ViewModels
<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class TestGetService
<OperationContract()>
<WebGet(RequestFormat:=WebMessageFormat.Json,
ResponseFormat:=WebMessageFormat.Json)>
Public Function TestGetFunction1(ByVal json As String) As String
Dim entity As Customer = JsonUtility.GetObject(Of Customer)(json)
'セッションを保存する
WcfService.Common.SetSession()
'クッキーを設定する
WcfService.Common.SetCookie()
Dim ret As Customer = entity
Return JsonUtility.GetJson(ret)
End Function
<OperationContract()>
<WebGet(RequestFormat:=WebMessageFormat.Json,
ResponseFormat:=WebMessageFormat.Json)>
Public Function TestGetFunction2(ByVal json As String) As Message
Dim entity As Customer = JsonUtility.GetObject(Of Customer)(json)
'セッションを保存する
WcfService.Common.SetSession()
'クッキーを設定する
WcfService.Common.SetCookie()
Dim ret As Customer = entity
Return WcfService.Common.GetJsonResponse(Of Customer)(ret)
End Function
End Class
Option Explicit On
Option Strict On
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports BaseLibrary.Library
Imports AspNetTest.ViewModels
<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class TestPostService
<OperationContract()>
<WebInvoke(Method:="POST",
BodyStyle:=WebMessageBodyStyle.Bare,
RequestFormat:=WebMessageFormat.Json,
ResponseFormat:=WebMessageFormat.Json,
UriTemplate:="TestPostFunction1"
)>
Public Function TestPostFunction1() As String
Dim json As String = OperationContext.Current.RequestContext.RequestMessage.ToString()
If String.IsNullOrEmpty(json) Then
Throw New InvalidOperationException("引数が設定されていません。")
End If
json = "<?xml version=""1.0"" encoding=""utf-8""?>" + System.Environment.NewLine + json
'Dim entity As Customer = JsonUtility.GetObject(Of Customer)(json)
Dim entity As Customer = XmlUtility.GetObject(Of Customer)(json)
'セッションを保存する
WcfService.Common.SetSession()
'クッキーを設定する
WcfService.Common.SetCookie()
Dim ret As Customer = entity
Return JsonUtility.GetJson(ret)
End Function
<OperationContract()>
<WebInvoke(Method:="POST",
BodyStyle:=WebMessageBodyStyle.Bare,
RequestFormat:=WebMessageFormat.Json,
ResponseFormat:=WebMessageFormat.Json,
UriTemplate:="TestPostFunction2"
)>
Public Function TestPostFunction2() As Message
Dim json As String = OperationContext.Current.RequestContext.RequestMessage.ToString()
If String.IsNullOrEmpty(json) Then
Throw New InvalidOperationException("引数が設定されていません。")
End If
json = "<?xml version=""1.0"" encoding=""utf-8""?>" + System.Environment.NewLine + json
'Dim entity As Customer = JsonUtility.GetObject(Of Customer)(json)
Dim entity As Customer = XmlUtility.GetObject(Of Customer)(json)
'セッションを保存する
WcfService.Common.SetSession()
'クッキーを設定する
WcfService.Common.SetCookie()
Dim ret As Customer = entity
Return WcfService.Common.GetJsonResponse(Of Customer)(ret)
End Function
End Class
<%@ 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 {
margin: 10px;
height: 32px;
font-size: 28px;
width:100%;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WcfService/TestService.svc" />
<asp:ServiceReference Path="~/WcfService/TestGetService.svc" />
</Services>
</asp:ScriptManager>
<div class="inner">
<p class="result text" ></p>
<p class="result_get1 text" ></p>
<p class="result_get2 text" ></p>
<p class="result_post1 text" ></p>
<p class="result_post2 text" ></p>
</div>
<script src="/App_Themes/default/scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
GetTest0();
GetTest1();
GetTest2();
PostTest1();
PostTest2();
});
function GetTest0() {
var text = "テスト";
var test = new TestService().GetTestService(text, function (result) {
$('.result').text(result);
});
}
function GetTest1() {
var obj = { "Id": 1, "Name": "名前1", "Age": 10, "Note": "備考1" };
var json = JSON.stringify(obj);
var test = new TestGetService().TestGetFunction1(json, function (result) {
$('.result_get1').text(result);
});
}
function GetTest2() {
var obj = { "Id": 2, "Name": "名前2", "Age": 20, "Note": "備考2" };
var json = JSON.stringify(obj);
var test = new TestGetService().TestGetFunction2(json, function (result) {
$('.result_get2').text(JSON.stringify(result));
});
}
function PostTest1() {
var obj = { "Id": 3, "Name": "名前3", "Age": 30, "Note": "備考3" };
var json = JSON.stringify(obj);
$.ajax({
type: "post",
url: "http://localhost:53854/WcfService/TestPostService.svc/TestPostFunction1",
datatype: "json",
contentType: "application/json; charset=utf-8",
data: json,
success: function (data) {
$(".result_post1").text(data);
},
error: function (jqXHR, textStatus, errorThrown) {
$(".result_post1").text(jqXHR.responseText || textStatus);
}
});
}
function PostTest2() {
var obj = { "Id": 4, "Name": "名前4", "Age": 40, "Note": "備考4" };
var json = JSON.stringify(obj);
$.ajax({
type: "post",
url: "http://localhost:53854/WcfService/TestPostService.svc/TestPostFunction2",
datatype: "json",
contentType: "application/json; charset=utf-8",
data: json,
success: function (data) {
$(".result_post2").text(JSON.stringify(data));
},
error: function (jqXHR, textStatus, errorThrown) {
$(".result_post2").text(jqXHR.responseText || textStatus);
}
});
}
</script>
</form>
</body>
</html>
Option Explicit On
Option Strict On
Imports System.Runtime.Serialization
Namespace ViewModels
<DataContract(Name:="root", Namespace:="")>
<System.Xml.Serialization.XmlRoot("root")>
Public Class Customer
<DataMember(Name:="Id")>
<System.Xml.Serialization.XmlElement("Id", GetType(Integer))>
Public Property Id As Integer = 0
<DataMember(Name:="Name")>
<System.Xml.Serialization.XmlElement("Name", GetType(String))>
Public Property Name As String = String.Empty
<DataMember(Name:="Age")>
<System.Xml.Serialization.XmlElement("Age", GetType(Integer))>
Public Property Age As Integer = 0
<DataMember(Name:="Gender")>
<System.Xml.Serialization.XmlElement("Gender", GetType(Integer))>
Public Property Gender As Integer = 0
<DataMember(Name:="Note")>
<System.Xml.Serialization.XmlElement("Note", GetType(String))>
Public Property Note As String = String.Empty
End Class
End Namespace
Option Explicit On
Option Strict On
Imports System.Net
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports System.IO
Imports System.ServiceModel.Channels
Imports System.Web.Script.Serialization
Namespace WcfService
Public Class Common
''' <summary>
''' セッションを保存する
''' </summary>
Public Shared Sub SetSession()
HttpContext.Current.Session("ASPNET_Session_Test") = "ASPNET_Session_Value"
End Sub
''' <summary>
''' クッキーを設定する
''' </summary>
Public Shared Sub SetCookie()
'クッキーの設定
Dim cookie As New HttpCookie("ASPNET_Cookie_Test")
cookie.HttpOnly = True
cookie.Expires = DateTime.Now.AddMonths(1)
cookie.Value = "ASPNET_Cookie_Value"
HttpContext.Current.Response.SetCookie(cookie)
End Sub
''' <summary>
''' System.ServiceModel.Channels.Messageを取得する
''' </summary>
''' <param name="instance">JSONに変換するインスタンス</param>
''' <returns>json</returns>
Public Shared Function GetJsonResponse(Of T)(ByVal instance As T) As Message
Dim context As WebOperationContext = WebOperationContext.Current
context.OutgoingResponse.Headers.Add("X-Content-Type-Options", "nosniff")
context.OutgoingResponse.Format = WebMessageFormat.Json
'Content-Type の書き換え
context.OutgoingResponse.ContentType = "application/json; charset=utf-8"
Return context.CreateJsonResponse(instance)
End Function
''' <summary>
''' System.ServiceModel.Channels.Messageを取得する
''' </summary>
''' <param name="text">JSON文字列</param>
''' <returns>String</returns>
''' <remarks>エスケープされていないJSON文字列を返すことができる</remarks>
Private Function GetTextResponse(ByVal text As String) As System.ServiceModel.Channels.Message
'Add 'X-Content-Type-Options: nosniff' header'
WebOperationContext.Current.OutgoingResponse.Headers.Add("X-Content-Type-Options", "nosniff")
WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json
Return WebOperationContext.Current.CreateTextResponse(text, "application/json; charset=utf-8", Encoding.UTF8)
End Function
Public Shared Function GetObjectFromJson(Of T)(ByVal json As String) As T
Dim seriaizer As JavaScriptSerializer = New JavaScriptSerializer()
Dim obj As T = DirectCast(seriaizer.Deserialize(json, GetType(T)), T)
End Function
Public Shared Function GetPostData() As String
Dim r As New StreamReader(HttpContext.Current.Request.InputStream)
Dim json As String = r.ReadToEnd()
Return json
End Function
End Class
End Namespace
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。