私は2つのプログラムを持っています.1つ目はasp.netで、2つ目はWCFサービスです。以下のコードはasp.netプログラムにあります。
Public Function GetDataSource(ByVal prmModule As Object, ByVal prmEndPointName As String)
Dim strEndPoint As String = GetEndPoint(prmEndPointName)
Dim wr As WebRequest = WebRequest.Create(strEndPoint & prmModule)
Dim ws As WebResponse = wr.GetResponse
Dim enc As Encoding = System.Text.Encoding.GetEncoding(1252)
Dim rs As New StreamReader(ws.GetResponseStream)
Dim response As String = rs.ReadToEnd
rs.Close()
Return response
End Function
Public Sub SendClientData(ByVal prmEndPoint As String, ByVal prmModule As String, ByVal prmSource As String)
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim address As Uri
Dim data As StringBuilder
Dim byteData() As Byte
Dim postStream As Stream = Nothing
' Set the REST API URL
address = New Uri(GetEndPoint(prmEndPoint) & prmModule)
' Create the web request
request = DirectCast(WebRequest.Create(address), HttpWebRequest)
' Set type to POST
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
' Create the data we want to send (each data.Append is for specific paramater data)
data = New StringBuilder()
data.Append(prmSource)
' Create a byte array of the data we want to send
byteData = UTF8Encoding.UTF8.GetBytes(data.ToString())
' Set the content length in the request headers
request.ContentLength = byteData.Length
Try
postStream = request.GetRequestStream()
postStream.Write(byteData, 0, byteData.Length)
Finally
If Not postStream Is Nothing Then postStream.Close()
End Try
End Sub
上記のコードは関数で、GetDataSource は GET メソッドに使用され、SendClientData は POST メソッドに使用されます。
<OperationContract()> _
<WebInvoke(Method:="POST", _
ResponseFormat:=WebMessageFormat.Json, _
BodyStyle:=WebMessageBodyStyle.Wrapped, _
UriTemplate:="applicant/post")> _
Sub postApplicant(ByVal request As Stream)
<OperationContract()> _
<WebInvoke(Method:="GET", _
ResponseFormat:=WebMessageFormat.Json, _
BodyStyle:=WebMessageBodyStyle.Wrapped, _
UriTemplate:="applicant/search/{firstname}/{lastname}/{dateofbirth}/{placeofbirth}")> _
Function getApplicantHaermes(ByVal firstname As String, ByVal lastname As String, ByVal dateofbirth As String, ByVal placeofbirth As String) As String
上記のコードは WCF サービス上にあり、実装された関数を呼び出すために使用されます。
主な質問は次のとおりです。
Dim arr As New ArrayList : arr.Add("Id")
Dim dt As New DataTable
Dim tempDT As New DataTable
tempDT = (AddPhoneNumberToDataTable(obj))
If Session("EditPhoneNumber") IsNot Nothing Then
SendClientData(EMPLOYEEENDPOINT, "phonenumber/postupdate/" & obj.HaermesOid, GetJsonFromDataTable(tempDT))
Else
SendClientData(EMPLOYEEENDPOINT, "phonenumber/post", GetJsonFromDataTable(tempDT))
dt = AssignToDataTable(GetDataSource("phonenumber/search/" & obj.Party.Oid.ToString & "/" & obj.PhoneType.ToString & _
"/" & obj.Number.ToString, EMPLOYEEENDPOINT), arr)
With obj
.HaermesOid = dt(0)("Id")
.Save()
End With
End If
ASP.Net から SendClientData を呼び出してデータを投稿する WCF サービスを呼び出すと、以下のコード (関数 GetDataSoucre) は WCF から ASP.Net にデータを取得するためのものですが、SendClientData を呼び出すと、実装されている関数が実行されています。まだ終了していない場合は、GET 関数が既に実行されており、2 つの関数が同時に実行されています。GET メソッドは POST メソッドからデータを取得しているため、結局 GET メソッドはデータを取得できませんでした。