私は vb.net/vs 2010 でいくつかのサービス参照を使用しましたが、これは証明書とカスタム SOAP ヘッダーの両方を必要とする最初のものでした。WSDL とリクエスト xml が与えられ、soapUI 3.5 で正常にテストされました。vb.net でサービス参照を作成した後、カスタム SOAP ヘッダーを追加する方法がわかりませんでした。
を実装する多くの例を見ましIClientMessageInspector
たが、何らかの理由でそれらのいずれも機能させることができませんでした。ほとんどは、Implements キーワードの理解不足に関係していましたが、エンドポイントの動作にも問題がありました。証明書のエンドポイント動作を既に使用していますが、1 つのエンドポイントで 2 つのエンドポイント動作を動作させることができませんでした。
HttpWebRequest に切り替えましたが、動作させることもできません。コードは実行されますが、サーバーから同様のエラーが発生します。The error is "Remote server returned an error:(500) Internal Server Error".
I used Fiddler to see the actual request and response, and the response is from their data power server is, "TID:247456978.Catastrophic Error. Please call IAS Datapower Support [ 'dp:reject' executed - Unable to find metadata for 'long_url' ]".
The developer's response is that their system is running fine, so problem is mine. soapUI を使用して有効な応答を取得できるため、同意します。
問題は、私が何を間違っているのかということです。以下のコードは正しく見えますか。私は正しい方向に進んでいますか、それともこの試みを放棄して、サービス参照を使用せずに SOAP 要求を行うための別の解決策を探す必要があります。
Public Shared Sub TryIt()
Try
Dim sSoapEnv As String = "<soap:Envelope>
{Rest of soap envelope here}"
sSoapEnv &= "</soap:Envelope>"
'MsgBox(sSoapEnv)
' Create a request using a URL that can receive a post.
Dim request As HttpWebRequest = HttpWebRequest.Create("https://yada.yada.yada.com:443/restofurl")
Dim cert As New X509Certificate2
cert.Import("T:\fullpathtocert\fw.hdnipa.com.p12", "cert_password", X509KeyStorageFlags.PersistKeySet)
Dim cred As New NetworkCredential("gdebacke.fmcdmn.local", "domain_password")
request.Credentials = cred
request.ClientCertificates.Add(cert)
' Set the Method property of the request to POST.
request.Method = "POST"
' Create POST data and convert it to a byte array.
Dim postData As String = sSoapEnv
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
' Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded"
' Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length
' Get the request stream.
Dim dataStream As Stream = request.GetRequestStream()
' Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length)
' Close the Stream object.
dataStream.Close()
' Get the response.
Dim response As HttpWebResponse = request.GetResponse()
' Display the status.
Console.WriteLine(response.StatusDescription)
' Get the stream containing content returned by the server.
dataStream = response.GetResponseStream()
' Open the stream using a StreamReader for easy access.
Dim reader As New StreamReader(dataStream)
' Read the content.
Dim responseFromServer As String = reader.ReadToEnd()
' Display the content.
Console.WriteLine(responseFromServer)
' Clean up the streams.
reader.Close()
dataStream.Close()
response.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub