Forgive me if this is a little OT. I’m replying by myself 'cause maybe I can help someone else.
If I POST data with 3rd parameter of Ajax() call, in REST service it’s mandatory to put a stream parameter in implementing function (and of course in the Interface declaration). So here’s my code:
<OperationContract()> <WebInvoke(Method:="POST", UriTemplate:="insertfoto/?uid={userid}&pwd={password}&dioc={dioc}&coda={coda}", ResponseFormat:=WebMessageFormat.Json)>
Function InsertFoto(userid As String, password As String, dioc As String, coda As String, foto As Stream) As String
Public Function InsertFoto(userid As String, password As String, dioc As String, coda As String, foto As Stream) As String Implements IUpdateDati.InsertFoto
Dim leggi As String = New StreamReader(foto).ReadToEnd
Dim img As Byte() = Convert.FromBase64String(leggi)
Dim sqnCs = System.Web.Configuration.WebConfigurationManager.ConnectionStrings("CamminoSqlDB").ConnectionString
Dim sqc As New SqlConnection(sqnCs)
Dim cmdUpFoto As New SqlCommand("UPDATE Anagrafica SET Foto = @Foto WHERE CodDiocesi = " + CStr(dioc) + " AND CodAnagrafica = " + CStr(coda), sqc)
Dim parFoto As New SqlParameter("@Foto", System.Data.SqlDbType.Image)
parFoto.Value = img
cmdUpFoto.Parameters.Add(parFoto)
sqc.Open()
Dim rkUpd = cmdUpFoto.ExecuteNonQuery()
sqc.Close()
Return "Foto aggiornata correttamente"
End Function
Finally, this is my VB code (pls note that I had to use PictureBox4.src instead of .toDataURL):
Dim foto=PictureBox4.src
URL="http://"+txtSvr.value+"/RestSvc4Gescom/UpdateDati.svc/insertfoto/?uid="+txtUserId.value+"&pwd="+txtPassword.value+"&dioc="+codDiocesi4+"&coda="+coda
encURL=encodeURI(URL)
req=Ajax(encURL,"POST",foto)