Imports System
Imports System.Net
Imports System.Security.Cryptography
Imports System.Text
Imports System.Web.Services.Protocols
Imports System.Xml
Module SampleClient
Sub Main(arg() As String)
If arg.Length <> 3 Then
Console.WriteLine("Usage: AtomClient user password url")
Return
End If
Dim user As String = arg(0)
Dim password As String = arg(1)
Dim url As String = arg(2)
' Create a blog entry
Dim blog As entryType = New entryType()
blog.issued = DateTime.Now
blog.title = "First Post!"
' Generator
blog.generator = New generatorType()
blog.generator.url = "http://www.intertwingly.net/blog/"
blog.generator.Value = "WSDL C# Client"
' Fill in the content
Dim d As XmlDocument = New XmlDocument()
d.InnerXml = "
Hello World!
"
blog.content = New contentType() { New contentType() }
blog.content(0).mode = contentTypeMode.xml
blog.content(0).type = "application/xhtml+xml"
blog.content(0).Any = New XmlNode() { d.DocumentElement }
' Create an 'atom' authorization header
Dim auth As Security = New Security()
Dim unt As UsernameToken = New UsernameToken()
auth.UsernameToken = New UsernameToken()
auth.UsernameToken.Nonce = New Random().Next().ToString()
auth.UsernameToken.Username=user
auth.UsernameToken.Created=DateTime.Now.ToString("u").Replace(" ","T")
' Fill in the password
Dim md As SHA1 = New SHA1CryptoServiceProvider()
Dim v As string = _
auth.UsernameToken.Nonce + auth.UsernameToken.Created + password
Dim digest As byte() = md.ComputeHash(Encoding.Default.GetBytes(v))
auth.UsernameToken.Password=New passwordType()
auth.UsernameToken.Password.Value=Convert.ToBase64String(digest)
auth.UsernameToken.Password.Type="wsse:PasswordDigest"
auth.UsernameToken.Password.AnyAttr=New XmlAttribute() { _
d.CreateAttribute("wsse:placeholder", _
"http://schemas.xmlsoap.org/ws/2002/07/secext") }
Try
' Post the request
Dim api As AtomAPI = New AtomAPI()
api.SecurityValue = auth
api.Url = url
api.POST(blog)
Catch fault As SoapException
System.Console.WriteLine(fault.Message)
Catch httpStatus As WebException
System.Console.WriteLine(httpStatus.Message)
End Try
End Sub
End Module