Jag håller på med ett system som bland annat skall skicka SMS via en yttre tjänst. Om man ut följande rader:HttpWebRequestfrån en Windows Service
Ett xml-block skickas med http till en speciell url så går sms:et iväg.
Koden nedanför fungerar perfekt när den anropas från ett Window Forms program.
Problemet är att den verkliga applikationen är en Windows Tjänst och då fungerar det inte.
Vi har en proxy som man måste gå igenom och min känsla är att det är den som spökar.
Jag har försökt att starta tjänsten både som "local system" och som mitt eget domainkonto.
Felen varierar lite mellan "Unable to connect to the remote server" och "The request was aborted: The request was canceled."
Någon ide?
mvh
Peter
Public Shared Sub SendSMS(ByVal ToAdress As String, ByVal Subject As String, ByVal Body As String)
Try
Dim result As String = ""
Dim strPost As String = CreateXMLMessage(ToAdress, Subject, Body)
Dim myWriter As StreamWriter
Dim objRequest As HttpWebRequest = WebRequest.Create("http://sms/services/sendsms")
Dim myProxy As New WebProxy()
myProxy.Address = New Uri("http://myproxy.se:8080")
myProxy.Credentials = New NetworkCredential("myUser", "myPassword", "myDomain")
objRequest.Proxy = myProxy
objRequest.Method = "POST"
objRequest.ContentLength = strPost.Length
objRequest.ContentType = "text/html"
myWriter = New StreamWriter(objRequest.GetRequestStream())
myWriter.Write(strPost, 0, strPost.Length)
myWriter.Close()
Dim objResponse As HttpWebResponse = objRequest.GetResponse()
Dim myReader As StreamReader
myReader = New StreamReader(objResponse.GetResponseStream())
result = myReader.ReadToEnd()
myReader.Close()
SaveSMSLogg(result)
Catch ex As Exception
ErrorLog.SaveError(ex, "SendSMS")
End Try
End SubSv: HttpWebRequestfrån en Windows Service
objRequest.Method = "POST"
objRequest.ContentLength = strPost.Length
objRequest.ContentType = "text/html"
myWriter = New StreamWriter(objRequest.GetRequestStream())
myWriter.Write(strPost, 0, strPost.Length)
myWriter.Close()
mot dessa:
Dim encoding As Encoding = encoding.GetEncoding(1252)
Dim byte1 As Byte() = encoding.GetBytes(strPost)
objRequest.Method = "POST"
objRequest.ContentLength = byte1.Length
objRequest.ContentType = "application/x-www-form-urlencoded"
Dim newStream As Stream = objRequest.GetRequestStream()
newStream.Write(byte1, 0, byte1.Length)
newStream.Close()
Så fungerar det. Tydligen så blir kodningen annorlunda när man kör från en windowstjänst
än då man kör interaktivt. Detta gjorde att antal tecken som skulle skickas blev fel vilket gjorde
att sändningen av xml-blocket aldrig fullbordades.
/Peter