2016-01-08 6 views
9

Bir html5 tuval içeriğini bir web sunucusu kullanarak localhost'a kaydetmeye çalışıyorum. Tuval değerini base64'te alıyorum ve web servisime yolluyorum. Ben webservice veri göndermek zaman Ama bu hatayı alıyorum ve dosya kaydedilmez:Base64'te Webservice'ye resim gönderme - 'application/octet-stream' beklenen türden 'text/xml; charset = utf-8 '

415: "ileti işlenemez içerik türü 'uygulama/sekizli-stream' beklenmiyordu çünkü 'text/xml; charset = utf-8' yazın. "

Neyi yanlış yapıyorum?

Service.vb

Imports System.IO 
Imports System.Drawing 

Public Class Service 
    Implements IService 

    Public Sub New() 
    End Sub 


    Public Function savePictureBase64(bytes As Byte()) As Boolean Implements IService.savePictureBase64 
     Dim fullOutputPath As String = "c:\temp\file.png" 

     'get a temp image from bytes, instead of loading from disk 
     'data:image/gif;base64, 


     Dim imagem As Image 
     Using ms As New MemoryStream(bytes) 
      imagem = Image.FromStream(ms) 
     End Using 

     File.WriteAllBytes(fullOutputPath, (bytes)) 

     Return True 


    End Function 

End Class 

IService.vb

<ServiceContract()> 
Public Interface IService 


    <OperationContract()> 
    Function savePictureBase64(bytes As Byte()) As Boolean 



    ' TODO: Add your service operations here 

End Interface 

JavaScript

function save() { 
       var image = document.getElementById("sketchpad").toDataURL("image/png"); 
       image = image.replace('data:image/png;base64,', ''); 
       $.ajax({ 
      type: 'POST', 
      url: 'http://localhost:52193/service.svc', 
      data: image, 
      contentType: 'application/octet-stream', 
       success: function (msg) { 
         alert('Image saved successfully !'); 
       }, 
       error: function(result) { 
        alert("Error"); 
       } 
      }); 
     } 

</script> 

web.config

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.5"/> 
    <httpRuntime targetFramework="4.5"/> 
    <pages> 
     <namespaces> 
     <add namespace="System.Runtime.Serialization"/> 
     <add namespace="System.ServiceModel"/> 
     <add namespace="System.ServiceModel.Web"/> 
     </namespaces> 
    </pages> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <basicHttpBinding> 
     <binding messageEncoding="Mtom"> 
     </binding> 
     </basicHttpBinding> 
    </bindings>  
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https"/> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 
</configuration> 
+1

İlgili: [Hata, içerik türü “uygulama/xop + xml” webservice tüketen beklenen türü “text/xml” eşleşmiyor ] (http://stackoverflow.com/questions/10496186/error-consuming-webservice-content-type-application-xopxml-does-not-match-ex). – cybermonkey

+0

Web.config dosyasına eklendi. Hala çalışmıyor – RSilva

+1

Bunu deneyin: 'data: {bytes: image}' ve silme contentType: 'application/octet-stream' ' – Hackerman

cevap

4

Hata, Javascript koduyla yaptığınız çağrıdır. Bir dize göndermeye çalışırsanız, web hizmeti bir XML iletisini bekler:

beklenen "text/xml; karakter kümesi = UTF-8' .

Javascript'ten bir web hizmeti XML iletisi oluşturmak ne kadar karmaşık olduğunu bilmiyorum, ancak yaklaşımınızı değiştirebileceğinizi düşünüyorum. Hizmetiniz IIS altında barındırılıyor, bir HttpHandler kurabilir misiniz?

public class UploadBase64 : IHttpHandler 
{ 
    public bool IsReusable 
    { 
     get { return true; } 
    } 
    public void ProcessRequest(HttpContext context) 
    { 
     string image_string = string.Empty; 
     using (StreamReader sr = new StreamReader(context.Request.InputStream)) 
      image_string = sr.ReadToEnd(); 
     byte[] image_bin = Convert.FromBase64String(image_string); 
     File.WriteAllBytes(@"c:\temp_10\test01.png", image_bin); 
    } 
} 

... ve web.config dosyaya bu ekleyin:

<system.web> 
    <httpHandlers> 
    <add verb="POST" path="UploadBase64.aspx" type="WebApplication1.UploadBase64"/> 
    </httpHandlers> 
</system.web>