2

私は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 メソッドはデータを取得できませんでした。

4

0 に答える 0