|
My Bad, I copy a newer version of MovieInfo over to the test database server, and forgot to copy the 2 join tables over, so there were no matches.
|
|
|
|
|
I need to print from rdlc without preview. I runs well when report is previewed with ReportViewer.
However, I have searched and copied from all available sources of "printing RDLC without preview but when i run my code I receive the error, "An error occurred during local report processing"
this occurs at the
report.Render("IMAGE", deviceInfo, AddressOf CreateStream, warnings)
below is my entire code
Imports System
Imports System.IO
Imports System.Data
Imports System.Text
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports Microsoft.Reporting.WinForms
Imports System.Drawing.Imaging
Module modul_print_reports
Private m_currentPageIndex As Integer
Private m_streams As IList(Of Stream)
Private printDoc As PrintDocument
''' <summary>
''' Print rdlc report with custom page width and height
''' </summary>
''' <param name="report"></param>
''' <param name="page_width">the width of the papger, in hunderdths of an inch</param>
''' <param name="page_height">the height of the papger, in hunderdths of an inch</param>
''' <param name="islandscap"></param>
''' <param name="printer_name">Ignore this parameter to use default printer</param>
''' <remarks></remarks>
Public Sub print_microsoft_report(ByRef report As LocalReport, ByVal page_width As Integer, ByVal page_height As Integer, _
Optional ByVal islandscap As Boolean = False, _
Optional ByVal printer_name As String = Nothing)
printDoc = New PrintDocument()
If printer_name <> Nothing Then printDoc.PrinterSettings.PrinterName = printer_name
If Not printDoc.PrinterSettings.IsValid Then ' detecate is the printer is exist
Throw New Exception("Cannot find the specified printer")
Else
Dim ps As New PaperSize("Custom", page_width, page_height)
printDoc.DefaultPageSettings.PaperSize = ps
printDoc.DefaultPageSettings.Landscape = islandscap
Export(report)
Print()
End If
End Sub
''' <summary>
''' Print rdlc report with specific paper kind
''' </summary>
''' <param name="report"></param>
''' <param name="paperkind">String paper Kind, ex:"letter"</param>
''' <param name="islandscap"></param>
''' <param name="printer_name">Ignore this parameter to use default printer</param>
''' <remarks></remarks>
Public Sub print_microsoft_report(ByVal report As LocalReport, Optional ByVal paperkind As String = "A4", _
Optional ByVal islandscap As Boolean = False, _
Optional ByVal printer_name As String = Nothing)
printDoc = New PrintDocument()
If printer_name <> Nothing Then printDoc.PrinterSettings.PrinterName = printer_name
If Not printDoc.PrinterSettings.IsValid Then ' detecate is the printer is exist
Throw New Exception("Cannot find the specified printer")
Else
Dim ps As PaperSize
Dim pagekind_found As Boolean = False
For i = 0 To printDoc.PrinterSettings.PaperSizes.Count - 1
If printDoc.PrinterSettings.PaperSizes.Item(i).Kind.ToString = paperkind Then
ps = printDoc.PrinterSettings.PaperSizes.Item(i)
printDoc.DefaultPageSettings.PaperSize = ps
pagekind_found = True
End If
Next
If Not pagekind_found Then Throw New Exception("paper size is invalid")
printDoc.DefaultPageSettings.Landscape = islandscap
Export(report)
Print()
End If
End Sub
' Routine to provide to the report renderer, in order to
' save an image for each page of the report.
Private Function CreateStream(ByVal name As String, ByVal fileNameExtension As String, _
ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
Dim stream As Stream = New MemoryStream()
m_streams.Add(stream)
Return stream
End Function
' Export the given report as an EMF (Enhanced Metafile) file.
Private Sub Export(ByVal report As LocalReport)
Dim w As Integer
Dim h As Integer
If printDoc.DefaultPageSettings.Landscape = True Then
w = printDoc.DefaultPageSettings.PaperSize.Height
h = printDoc.DefaultPageSettings.PaperSize.Width
Else
w = printDoc.DefaultPageSettings.PaperSize.Width
h = printDoc.DefaultPageSettings.PaperSize.Height
End If
Dim deviceInfo As String = "<DeviceInfo>" & _
"<OutputFormat>EMF</OutputFormat>" & _
"<PageWidth>" & w / 100 & "in</PageWidth>" & _
"<PageHeight>" & h / 100 & "in</PageHeight>" & _
"<StartPage>0</StartPage><EndPage>0</EndPage><MarginTop>0.0in</MarginTop>" & _
"<MarginLeft>0.0in</MarginLeft>" & _
"<MarginRight>0.0in</MarginRight>" & _
"<MarginBottom>0.0in</MarginBottom>" & _
"</DeviceInfo>"
Dim warnings As Warning()
m_streams = New List(Of Stream)()
'Dim byt As Byte() = report.Render("IMAGE")
report.Render("IMAGE", deviceInfo, AddressOf CreateStream, warnings)
For Each stream As Stream In m_streams
stream.Position = 0
Next
End Sub
' Handler for PrintPageEvents
Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
Dim pageImage As New Metafile(m_streams(m_currentPageIndex))
' Adjust rectangular area with printer margins.
Dim adjustedRect As New Rectangle(ev.PageBounds.Left - CInt(ev.PageSettings.HardMarginX),
ev.PageBounds.Top - CInt(ev.PageSettings.HardMarginY), _
ev.PageBounds.Width, _
ev.PageBounds.Height)
' Draw a white background for the report
ev.Graphics.FillRectangle(Brushes.White, adjustedRect)
' Draw the report content
ev.Graphics.DrawImage(pageImage, adjustedRect)
' Prepare for the next page. Make sure we haven't hit the end.
m_currentPageIndex += 1
ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
End Sub
Private Sub Print()
If m_streams Is Nothing OrElse m_streams.Count = 0 Then
Throw New Exception("Error: no stream to print.")
End If
AddHandler printDoc.PrintPage, AddressOf PrintPage
m_currentPageIndex = 0
printDoc.Print()
End Sub
End Module
cn.Open()
Dim cmd = New SqlCommand("SELECT [BatchNo]," +
"[ProdID],[ProdName],[MfgDate],[ExpDate],[ImgName],[ImgPath],[UserID],[FullName]" +
"FROM dbo.vwBatchRecs WHERE [BatchNo]=@bn ORDER BY [ImgName]", cn)
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@bn", pf_Id)
Dim dr = cmd.ExecuteReader()
Dim dt As New DataTable
dt.Load(dr)
Dim rpt As New LocalReport
rpt.DataSources.Clear()
rpt.EnableExternalImages = True
rpt.ReportEmbeddedResource = "PharmaDoc.BatchPrep.rdlc"
rpt.ReportPath = "BatchPrep.rdlc"
rpt.DataSources.Add(New ReportDataSource("vwBatchRecs", dt)) '
rpt.Refresh()
dr.Close()
cmd.Dispose()
cn.Close()
'rpt.SetDisplayMode(DisplayMode.PrintLayout)
'rpt.ZoomMode = ZoomMode.FullPage
'Dim cp As New Reportprint
print_microsoft_report(rpt)
I have also tried the following source but still same problem <a href="https://msdn.microsoft.com/en-us/library/ms252091%28v=vs.100%29.aspx">https://msdn.microsoft.com/en-us/library/ms252091%28v=vs.100%29.aspx</a>[<a href="https://msdn.microsoft.com/en-us/library/ms252091%28v=vs.100%29.aspx" target="_blank" title="New Window">^</a>]
|
|
|
|
|
Hello!
I need help please! I have no experience in programming or whatsoever and I have been sent this excel file to execute macros. But somehow it doesn't work and the message Excel VBA Function runtime error 1004: Application-defined or object-defined error message keeps appearing. I don't know what's wrong or how to fix it...
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True,_
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="<", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
This is the highlighted part. Is there something wrong with the coding? Or is it because the file was created on non-Mac laptop and I am using Mac?
Please help, I would really appreciate it! Thank you!
|
|
|
|
|
You would probably get a faster answer by going back to the person who sent you the file.
|
|
|
|
|
Hi,
My vb application is going to call a DoPrint function in a dll file.
The dll to notify the vb application when the printing is done.
I'm trying to us the below:
Public Delegate Sub Action(Of T) (obj As T)
But not sure how to imlement it.
Does anyone have a suggestion or a working example ?
Thanks
|
|
|
|
|
|
Perhaps there's someone out there that has done FirstData G4 SOAP V14 in VB, and can checkout or point out any mistakes I made.
So I get this error upon transmitting
The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was ''.
So I'm figuring my HMAC header authentication is way off, and i get a generic response back.
I have a XML version that works just fine. And the G4 Sandbox has a HMAC Calculator tool, that I can use to compare and generate the values.
Issue 1:
But I'm not sure if what I'm pasting in as content is correct, in order to validate the code block, 2 blocks below.
example: Not sure if this is the correct format of SOAP Content, so I can run the FirstData HMAC Generate to confirm my values are right.
I using the same code sort of, to generate the HMAC stuff.
I just can't get a match of values, I'm way off, so I'm thinking that the SOAP content I generating against is wrong, in size and all.
If I fix issue 1, perhaps the rest of my code works fine.
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<q1:SendAndCommit xmlns:q1="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/Request">
<SendAndCommitSource href="#id1"/>
</q1:SendAndCommit>
<q2:Transaction id="id1" xsi:type="q2:Transaction" xmlns:q2="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes">
<ExactID xsi:type="xsd:string">AH2824-05</ExactID>
<Password xsi:type="xsd:string">0g4tu7pj1hb88q5d8xa55dlhvhvwlm3r</Password>
<Transaction_Type xsi:type="xsd:string">00</Transaction_Type>
<DollarAmount xsi:type="xsd:string">99.20</DollarAmount>
<Card_Number xsi:type="xsd:string">4111111111111111</Card_Number>
<Expiry_Date xsi:type="xsd:string">1215</Expiry_Date>
<CardHoldersName xsi:type="xsd:string">Joe Smoe</CardHoldersName>
<CVDCode xsi:type="xsd:string">999</CVDCode>
<Reference_No xsi:type="xsd:string">CA-Test4</Reference_No>
<Client_IP xsi:type="xsd:string">::1</Client_IP>
<Client_Email xsi:type="xsd:string">xxxxxxx@gmail.com</Client_Email>
<Currency xsi:type="xsd:string">USD</Currency>
<Address href="#id2"/>
</q2:Transaction>
<q3:Address_Type id="id2" xsi:type="q3:Address_Type" xmlns:q3="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes">
<Address1 xsi:type="xsd:string">1234 Main Street</Address1>
<Address2 xsi:type="xsd:string"/>
<City xsi:type="xsd:string">Huntington Beach</City>
<State xsi:type="xsd:string">CA</State>
<Zip xsi:type="xsd:string">92648</Zip>
<CountryCode xsi:type="xsd:string">US</CountryCode>
</q3:Address_Type>
</s:Body>
</s:Envelope>
Issue 2:
This is my BeforeSendRequest. Im not sure how to check the SOAP to make sure if the header has been altered properly before transmitting, but the handler does run.
Public Function BeforeSendRequest( _
ByRef request As Message,
ByVal channel As IClientChannel) As Object Implements IClientMessageInspector.BeforeSendRequest
Dim buffer As MessageBuffer = request.CreateBufferedCopy(Int32.MaxValue)
request = buffer.CreateMessage
Dim msg As Message = buffer.CreateMessage
Dim encoder As ASCIIEncoding = New ASCIIEncoding
Dim sb As StringBuilder = New StringBuilder
Dim xmlSettings As New XmlWriterSettings
xmlSettings.OmitXmlDeclaration = True
Dim xmlWriter As XmlWriter = xmlWriter.Create(sb, xmlSettings)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(xmlWriter)
msg.WriteStartEnvelope(writer)
msg.WriteStartBody(writer)
msg.WriteBodyContents(writer)
xmlWriter.WriteEndElement()
xmlWriter.WriteEndElement()
writer.Flush()
Dim body As String = sb.ToString.Replace(" />", "/>")
Dim xml_bytes() As Byte = encoder.GetBytes(body)
Dim sha1_crypto As SHA1CryptoServiceProvider = New SHA1CryptoServiceProvider
Dim hash As String = BitConverter.ToString(sha1_crypto.ComputeHash(xml_bytes)).Replace("-", "")
Dim hashed_content As String = hash.ToLower
Dim m_method As String = "POST"
Dim m_type As String = "application/xml"
Dim m_time As String = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
Dim m_hashData As String = m_method & vbLf & m_type & vbLf & hashed_content & vbLf & m_time & vbLf & _endPoint_Uri
Dim m_hmac_sha1 As HMAC = New HMACSHA1(Encoding.UTF8.GetBytes(_hmac))
Dim m_hmac_data() As Byte = m_hmac_sha1.ComputeHash(Encoding.UTF8.GetBytes(m_hashData))
Dim m_base64_hash As String = Convert.ToBase64String(m_hmac_data)
Dim httpRequestMessage As HttpRequestMessageProperty
Dim httpRequestMessageObject As Object = Nothing
If request.Properties.TryGetValue(HttpRequestMessageProperty.Name, httpRequestMessageObject) Then
httpRequestMessage = CType(httpRequestMessageObject, HttpRequestMessageProperty)
httpRequestMessage.Headers("x-gge4-date") = m_time
httpRequestMessage.Headers("x-gge4-content-sha1") = hashed_content
httpRequestMessage.Headers("Authorization") = "GGE4_API " & _keyID & ":" & m_base64_hash
Else
httpRequestMessage = New HttpRequestMessageProperty
httpRequestMessage.Headers("x-gge4-date") = m_time
httpRequestMessage.Headers("x-gge4-content-sha1") = hashed_content
httpRequestMessage.Headers("Authorization") = "GGE4_API " & _keyID & ":" & m_base64_hash
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage)
End If
Return Nothing
End Function
Issue 3:
My Transmit Code, I'm quite sure I got this right this time. I made a Service Reference, and not a web reference this time. I sort of used the same code I used for paypal, but added the endpoint behavior, so the authentication header would be added in the Soap Request.
Using client = New ServiceSoapClient(New BasicHttpsBinding(), remoteAddress)
client.ChannelFactory.Endpoint.EndpointBehaviors.Add(New HMAC_SR_Header_Behavior(
uRequest.eXact.HMAC_ID,
uRequest.eXact.HMAC_Key,
m_endpointUri
)
)
Dim responseType As New TransactionResult
responseType = client.SendAndCommit(ppRequest)
ppResponse = responseType
End Using
FYI:
The FirstData support site was useless. All they do there is mobile stuff, Perl, Ruby, Rest. I got crickets from the site, and deaf ears.
[edited] took my personal information out
modified 30-Jun-15 12:47pm.
|
|
|
|
|
Edited to make XML readable
|
|
|
|
|
|
I got schooled in this. So when you send a SOAP request, you can't use the actual header to measure with, you have to make a copy of the header.
When you copy the header using XMLWriter in string format, it makes a UTF-16 copy and not a UTF8. So you have to make a memory stream copy, and set the encoding to UTF8.
Now the subject of empty elements. XMLWriter by Microsoft makes <element> instead of the short form <element>. So that's one of the reasons I could not match the content digest.
The XMLWriter cannot be programmed to do Empty Short tags, and will always default <element>, where the SOAP request will instead do the short format <element>.
Finally, after getting the copy of the request to exactly match what was being transmitted, the First Data server said the it didn't match.
So I think the issue is on the First Data side, there open source code running on an Apache Server. They must consume the request first, and then take a measurement of the body.
I suspect the same issue with the long and short empty element exist in their code, where the short tag version was converted to the long format, and then they made there HMAC calc.
If you search on the subject, there's nothing using visual basic. I wonder if C# would of gave different output and results.
Comments are welcomed on this.
|
|
|
|
|
I got issue 1 to calculate right finally.
I pasted the actual content into a string calculated against it, and changed the type to text/xml.
This part of the code doesnt work right. That's what I get for copying code from the internet.
The XML stuff, doesn't appeared to be used at all, so I'm not sure of the purpose of it.
I guess the question is, how to get the body from the copy of the request?, to calculate against.
Public Function BeforeSendRequest( _
ByRef request As Message,
ByVal channel As IClientChannel) As Object Implements IClientMessageInspector.BeforeSendRequest
Dim buffer As MessageBuffer = request.CreateBufferedCopy(Int32.MaxValue)
request = buffer.CreateMessage
Dim msg As Message = buffer.CreateMessage
Dim encoder As ASCIIEncoding = New ASCIIEncoding
Dim sb As StringBuilder = New StringBuilder
Dim xmlSettings As New XmlWriterSettings
xmlSettings.OmitXmlDeclaration = True
Dim xmlWriter As XmlWriter = xmlWriter.Create(sb, xmlSettings)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(xmlWriter)
msg.WriteStartEnvelope(writer)
msg.WriteStartBody(writer)
msg.WriteBodyContents(writer)
xmlWriter.WriteEndElement()
xmlWriter.WriteEndElement()
writer.Flush()
Dim body As String = sb.ToString.Replace(" />", "/>")
Dim xml_bytes() As Byte = encoder.GetBytes(body)
|
|
|
|
|
So I finally figured out how to just get the Body of the Message, and calc against it, and veriffied it in the FirstData API Tool
I removed the msg.WriteStartHeader and the end element to just get the body only.
Still can't authenticate, but I checked the response message, and the new elements were not there.
So now I'm down to that part, hopefully I'll figure it out today, then it should work properly.
Public Function BeforeSendRequest( _
ByRef request As Message,
ByVal channel As IClientChannel) As Object Implements IClientMessageInspector.BeforeSendRequest
Dim buffer As MessageBuffer = request.CreateBufferedCopy(Int32.MaxValue)
request = buffer.CreateMessage
Dim msg As Message = buffer.CreateMessage
Dim encoder As ASCIIEncoding = New ASCIIEncoding
Dim sb As StringBuilder = New StringBuilder
Dim xmlSettings As New XmlWriterSettings
xmlSettings.OmitXmlDeclaration = True
Dim xmlWriter As XmlWriter = xmlWriter.Create(sb, xmlSettings)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(xmlWriter)
'Just grab the body of the request to generate the HMAC
msg.WriteStartBody(writer)
msg.WriteBodyContents(writer)
xmlWriter.WriteEndElement()
writer.Flush()
Dim body As String = sb.ToString.Replace(" />", "/>")
Dim xml_bytes() As Byte = encoder.GetBytes(body)
'SHA1 hash on XML string
Dim sha1_crypto As SHA1CryptoServiceProvider = New SHA1CryptoServiceProvider
Dim hash As String = BitConverter.ToString(sha1_crypto.ComputeHash(xml_bytes)).Replace("-", "")
Dim hashed_content As String = hash.ToLower
'assign values to hashing and header variables
Dim m_method As String = "POST"
Dim m_type As String = "text/xml"
Dim m_time As String = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
Dim m_hashData As String = m_method & vbLf & m_type & vbLf & hashed_content & vbLf & m_time & vbLf & _endPoint_Uri
'Compute the HMAC and convert to a base64 hash
Dim m_hmac_sha1 As HMAC = New HMACSHA1(Encoding.UTF8.GetBytes(_hmac))
Dim m_hmac_data() As Byte = m_hmac_sha1.ComputeHash(Encoding.UTF8.GetBytes(m_hashData))
Dim m_base64_hash As String = Convert.ToBase64String(m_hmac_data)
Dim httpRequestMessage As HttpRequestMessageProperty
Dim httpRequestMessageObject As Object = Nothing
'This part must not be working - The header elements just wont add to the message
If request.Properties.TryGetValue(HttpRequestMessageProperty.Name, httpRequestMessageObject) Then
'This block never runs, but is here in case the condition is true
httpRequestMessage = CType(httpRequestMessageObject, HttpRequestMessageProperty)
httpRequestMessage.Headers("x-gge4-date") = m_time
httpRequestMessage.Headers("x-gge4-content-sha1") = hashed_content
httpRequestMessage.Headers("authorization") = "gge4_api " & _keyID & ":" & m_base64_hash
Else
'This code block here doesn't seem to add the header elements
httpRequestMessage = New HttpRequestMessageProperty
httpRequestMessage.Headers("x-gge4-date") = m_time
httpRequestMessage.Headers("x-gge4-content-sha1") = hashed_content
httpRequestMessage.Headers("authorization") = "gge4_api " & _keyID & ":" & m_base64_hash
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage)
End If
Return Nothing
End Function
|
|
|
|
|
I just can't the hashed content right here. So the first request is what's in StringBullder, and the 2nd request is what's was transmitted to the service
Now I can see there's a difference, but not sure if which direction to go.
I tried just getting the body and hashing, but was off.
This is what I hash against
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><q1:SendAndCommit xmlns:q1="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/Request"><SendAndCommitSource href="#id1"/></q1:SendAndCommit><q2:Transaction id="id1" xsi:type="q2:Transaction" xmlns:q2="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes"><ExactID xsi:type="xsd:string">AH2824-05</ExactID><Password xsi:type="xsd:string">0g4tu7pj1hb88q5d8xa55dlhvhvwlm3r</Password><Transaction_Type xsi:type="xsd:string">00</Transaction_Type><DollarAmount xsi:type="xsd:string">99.20</DollarAmount><Card_Number xsi:type="xsd:string">4111111111111111</Card_Number><Expiry_Date xsi:type="xsd:string">1215</Expiry_Date><CardHoldersName xsi:type="xsd:string">Jim Kirker</CardHoldersName><CVDCode xsi:type="xsd:string">999</CVDCode><Reference_No xsi:type="xsd:string">CA-Test</Reference_No><Client_IP xsi:type="xsd:string">::1</Client_IP><Client_Email xsi:type="xsd:string">jkirkerx@gmail.com</Client_Email><Currency xsi:type="xsd:string">USD</Currency><Address href="#id2"/></q2:Transaction><q3:Address_Type id="id2" xsi:type="q3:Address_Type" xmlns:q3="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes"><Address1 xsi:type="xsd:string">18751 Park Haven Lane</Address1><Address2 xsi:type="xsd:string"></Address2><City xsi:type="xsd:string">Huntington Beach</City><State xsi:type="xsd:string">CA</State><Zip xsi:type="xsd:string">92648</Zip><CountryCode xsi:type="xsd:string">US</CountryCode></q3:Address_Type></s:Body></s:Envelope>
This is what's transmitted, using Fiddler Raw View
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPo9SVGdFyrSRIggrGNQtX310AAAAAhRk+BZwrlEmerSG7e6xTXgkQ9xZ9IRxJmASnRkw2CLgACQAA</VsDebuggerCausalityData></s:Header><s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><q1:SendAndCommit xmlns:q1="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/Request"><SendAndCommitSource href="#id1"/></q1:SendAndCommit><q2:Transaction id="id1" xsi:type="q2:Transaction" xmlns:q2="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes"><ExactID xsi:type="xsd:string">AH2824-05</ExactID><Password xsi:type="xsd:string">0g4tu7pj1hb88q5d8xa55dlhvhvwlm3r</Password><Transaction_Type xsi:type="xsd:string">00</Transaction_Type><DollarAmount xsi:type="xsd:string">99.20</DollarAmount><Card_Number xsi:type="xsd:string">4111111111111111</Card_Number><Expiry_Date xsi:type="xsd:string">1215</Expiry_Date><CardHoldersName xsi:type="xsd:string">Jim Kirker</CardHoldersName><CVDCode xsi:type="xsd:string">999</CVDCode><Reference_No xsi:type="xsd:string">CA-Test</Reference_No><Client_IP xsi:type="xsd:string">::1</Client_IP><Client_Email xsi:type="xsd:string">jkirkerx@gmail.com</Client_Email><Currency xsi:type="xsd:string">USD</Currency><Address href="#id2"/></q2:Transaction><q3:Address_Type id="id2" xsi:type="q3:Address_Type" xmlns:q3="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes"><Address1 xsi:type="xsd:string">18751 Park Haven Lane</Address1><Address2 xsi:type="xsd:string"/><City xsi:type="xsd:string">Huntington Beach</City><State xsi:type="xsd:string">CA</State><Zip xsi:type="xsd:string">92648</Zip><CountryCode xsi:type="xsd:string">US</CountryCode></q3:Address_Type></s:Body></s:Envelope>
Dim sb As StringBuilder = New StringBuilder
Dim xmlSettings As New XmlWriterSettings
xmlSettings.OmitXmlDeclaration = True
Dim xmlWriter As XmlWriter = xmlWriter.Create(sb, xmlSettings)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(xmlWriter)
'Just grab the body of the request to generate the HMAC
msg.WriteStartEnvelope(writer) 'If i remark this out, I get just the body to hash against
msg.WriteStartBody(writer)
msg.WriteBodyContents(writer)
xmlWriter.WriteEndElement()
xmlWriter.WriteEndElement() 'If i remark this out, I get just the body to hash against
writer.Flush()
Dim body As String = sb.ToString.Replace(" />", "/>")
Dim xml_bytes() As Byte = encoder.GetBytes(body)
|
|
|
|
|
Hello !
I'm using vb.net and Entity framework 6.
I have a situation , when I have several SQL queries that are generated on runtime( different query's type : Delete or Update ) applied to different tables.
I know that I can execute them one by one with
Context.Database.ExecuteSqlCommand using multiple database hit.
Is there any way to execute them using one database hit ?
Thank you !
modified 28-Jun-15 2:05am.
|
|
|
|
|
Make sure that each SQL-statement is terminated by a semicolon. Concatenate them. Execute that batch statement with Context.Database.ExecuteSqlCommand(..).
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
Please can you explain your idea , with my below example :
For the moment I'm using this , but this need 2 database hit:
sql1="UPDATE MyTable1 SET Name = 'Test2' WHERE Id = 2"
sql2="Delete * from TB2 WHERE Id = 31"
context.Database.ExecuteSqlCommand(sql1)
context.Database.ExecuteSqlCommand(sql2)
Now , using your suggestion , I have this :
context.Database.ExecuteSqlCommand(sql1 & ";" & sql2)
But doesn't work.
|
|
|
|
|
Apparently EF doesn't support batching, I didn't expect that. You would need to use SqlCommand.ExecuteNonQuery(..)[^] with ADO.NET then instead.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
ok , but is there any way to extract the current connection string from DBcontext ?
modified 28-Jun-15 5:43am.
|
|
|
|
|
I don't know. But it should be rather easily accessible from the app.config.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
A little Google goes a long way:
string connStr = context.Database.Connection.ConnectionString;
Entity Framework does NOT support batching.
|
|
|
|
|
I've already tried this.
But I get an error : Invalid connection string"
|
|
|
|
|
Well, that's where you get it from. If you're using it incorrectly, I can't do anything about that.
|
|
|
|
|
You didn't test your DELETE command in SQL Manager did you?
Your DELETE command is bad. You don't put a "*" in it. It's just
DELETE FROM TB2 WHERE Id = 31
|
|
|
|
|
It's a typing mistake. I have the query exactly like your query.
But the last command with merged queries doesn't work.
|
|
|
|
|
Hello !
I'm using vb.net 2013 , sql server 2008R2 , Entity framework 6 with DBContext database first.
when the user delete an object on an entity , I want to create a kind of "recovery script" and save it to a file. If this script is called by the user , he should recreate the deleted object again.
There are 2 cases :
- The record has no childs
- The record has childs ( so the recovery script should recreate the childs too)
I don't know if this will be a sql script , because when thi script will be used , the "Deleted object" should be inserted on an entity , and after should be the user that should decide to save it or no on database. Also before this object be saved on database , some testing actions will be made ( the same actions with the case when a new record is created )
any idea how can I do this ?
Thank you !
|
|
|
|
|