2016-01-08 8 views
9

ウェブサーバーを使用して、html5キャンバスのコンテンツをlocalhostに保存しようとしています。 私はbase64でキャンバスの値を取得しており、私はそれを私のwebserviceに送信します。 しかし、私はWebサービスにデータを送信するとき、私はこのエラーを取得し、ファイルが保存されていません。画像をbase64でWebserviceに送信しました - 'application/octet-stream'が予期しないタイプ 'text/xml; charset = utf-8 '

415:「コンテンツタイプ 『アプリケーション/ octet-streamの』が期待されていなかったため、メッセージを処理できません'text/xml; charset = utf-8'と入力してください。 "

私は間違っていますか?

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

関連:[エラーのかかるWebサービス、コンテンツタイプ「アプリケーション/ XOP + xmlのは、」期待されるタイプ「text/xmlで」と一致していません](http://stackoverflow.com/questions/10496186/error-consuming-webservice-content-type-application-xopxml-does-not-match-ex)。 – cybermonkey

+0

web.configにを追加しました。まだ動作していません – RSilva

+1

これを試してください: 'data:{bytes:image}'と 'contentType: 'application/octet-stream''の行を削除してください – Hackerman

答えて

4

エラーはJavascriptコードで行った呼び出しです。文字列を送信しようとすると、webserviceはXMLメッセージを期待していました。

予想されるタイプ 'text/xml; charset = utf-8 'となります。

Javascriptからwebservice XMLメッセージを作成することがどれほど複雑かはわかりませんが、私はあなたのアプローチを変更できると思います。あなたのサービスはIISの下でホストされています、あなたはHttpHandlerを構築できますか?

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); 
    } 
} 

...とあなたweb.configファイルに以下を追加:

<system.web> 
    <httpHandlers> 
    <add verb="POST" path="UploadBase64.aspx" type="WebApplication1.UploadBase64"/> 
    </httpHandlers> 
</system.web> 
関連する問題