0

パラメータが有効ではありませんというエラーが表示されます。この問題を解決するにはどうすればよいですか?

次のコードはサーバー側です

MemoryStream ms = new MemoryStream(ObjDt.ImgUpload);                  
                ms.Write(ObjDt.ImgUpload, 0, ObjDt.ImgUpload.Length);                
                System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);               
                image.Dispose();                
                image.Save(@"D:\Projects\WCF\WCF_ImageUpload\DamagedImages\" + strRandNo + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);                
                // image.Save(@"C:\DotNet\ImageUpload\DamagedImages\" + strRandNo + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                //return strRandNo.ToString();
                string val = strRandNo.ToString();
IPAddress = "localhost:53865/WCF/Image" + val + ".jpg";

これらのコードでは、パラメーターが無効なエラーを取得しています..これらのコードのWeb構成は

<bindings>
      <basicHttpBinding>
        <binding name="StreamedBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Streamed">
          <readerQuotas maxDepth="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
        </binding>
          </basicHttpBinding>
        </bindings>

<services>      
      <service name="Service" behaviorConfiguration="ServiceBehavior">
        <!-- <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicBinding1" contract="WCF_ImageUpload.IService1"></endpoint>-->
        <endpoint address="" binding="basicHttpBinding"
                          bindingConfiguration="StreamedBinding" bindingName="ServiceBehavior"
                          contract="WCF_ImageUpload.IService1" />
      </service>
    </services>

Windows アプリケーションで次のクライアント アプリケーションを使用しています。

Uri uri = new Uri("http://localhost:53865/Service1.svc/UploadDamagedImage");
            Details ObjDt = new Details();
            ObjDt.Name = "hi";
            ObjDt.Email = "hi@gmail.com";
            ObjDt.ContactNumber = "3698754215";
            ObjDt.DeviceModel = "E23";
            ObjDt.Problem = "Repair";
            ObjDt.Besttimetocontact = "9am";
byte[] bytes = File.ReadAllBytes("D:/WCFImages/admin.png");
ObjDt.ImgUpload = bytes;
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Details));
            // xmlserializer xser = new xmlserializer();
            MemoryStream mem = new MemoryStream();
            ser.WriteObject(mem, ObjDt);
            string data = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length);
            WebClient webClient = new WebClient();
            webClient.UploadStringCompleted += new UploadStringCompletedEventHandler(webClient_UploadStringCompleted);
            webClient.Headers["Content-type"] = "application/json";
            webClient.Encoding = Encoding.UTF8;
            webClient.UploadStringAsync(uri, "POST", data);    
4

1 に答える 1

0

例外が発生した行を教えてください。また、スタック トレースを提供してください。以下は、投稿したコードを一目見ただけでわかることです...

次の行は有効な C# 構文ではありません。

IPAddress = "http://localhost:53865/WCF/Image" + val + ".jpg";

また、文字列は IP アドレスを表していないため、 type のオブジェクトに割り当てることはできませんIPAddressIPAddressC# の命名規則では、変数名は小文字で始める必要があるため、これは変数名ではないと想定しています。

それに加えて、コードに欠陥があります。画像を作成し、それを破棄してから保存しようとします。

System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);               
image.Dispose();                
image.Save(@"D:\Projects\WCF\WCF_ImageUpload\DamagedImages\" + strRandNo + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);         

それは逆でなければなりません: 作成、保存、破棄:

System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);               
image.Save(@"D:\Projects\WCF\WCF_ImageUpload\DamagedImages\" + strRandNo + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
image.Dispose();  

またはさらに良い:

using (System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true))              
{
    image.Save(@"D:\Projects\WCF\WCF_ImageUpload\DamagedImages\" + strRandNo + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
}

編集
コメントでは、ストリームから画像をロードする行がエラーをスローすると言っています。これにより、次の点を確認する必要があります。

次の 2 行を実行するのは冗長です (場合によってはエラーになります)。

MemoryStream ms = new MemoryStream(ObjDt.ImgUpload);                  
ms.Write(ObjDt.ImgUpload, 0, ObjDt.ImgUpload.Length);  

最初の行は、で指定されたバイトに基づくメモリ ストリームを作成しますObjDt.ImgUpload(ストリームは、その行の後に既に "イメージを含んでいます")。次に、バイトをもう一度ストリームに書き込みます。ストリームのコンストラクターからパラメーターを削除するか、バイトをストリームに書き込む行を削除してください。

全体として、これら 2 つの行は、ストリームに有効な画像データが含まれていないことにつながります。これは、画像バイトが連続して 2 回含まれているためです。また、ストリーム内にカラー マネージメント情報が存在することを示すパラメータについても確信が持てませんbool。テストのために削除してください。コードは次のようになります。

using (MemoryStream ms = new MemoryStream(ObjDt.ImgUpload))
using (System.Drawing.Image image = System.Drawing.Image.FromStream(ms))              
{
    image.Save(@"D:\Projects\WCF\WCF_ImageUpload\DamagedImages\" + strRandNo + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
}
于 2013-01-08T12:05:22.673 に答える