2013-01-08 68 views
0

我得到的参数是无效error.how来解决这个问题吗?参数无效错误

下面的代码是服务器端

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"; 

在这些代码即时得到的参数是这些代码无效error..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 = "[email protected]"; 
      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);  
+0

您是否调试过您的代码?哪条线给你这个错误? –

+0

发布例外消息 –

回答

0

请告诉我们发生异常的行 - 也请提供一个堆栈跟踪。下面正是我从您发布的代码快速一眼就能看到...

此行是无效的C#语法:

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

此外,该字符串不表示IP地址,因此无法将其分配给IPAddress类型的对象。我假设IPAddress不是变量名称,因为C#状态的命名约定变量名称应以小写字母开头。

除此之外,代码是有缺陷的。您正在创建该映像,然后将其丢弃,然后尝试保存该映像。

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

编辑你是说
在您的评论从流中加载图像的行会引发错误。这导致下面的你应该检查:

它是多余的(甚至你的情况的错误),以执行以下两行:

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

第一行创建是基于该内存流在ObjDt.ImgUpload中给出的字节(在该行后面的流已经“包含图像”)。然后您再次将该字节写入流。从流的构造函数中删除参数或删除将字节写入流的行。

总而言之,这两行导致流中不包含有效的图像数据,因为它包含连续两次的图像字节。此外,我不确定指示流中是否存在色彩管理信息的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); 
} 
+0

在这里,我正在获取参数是无效的错误图片图像= Image.FromStream(ms); – user1934099

+0

我编辑了我的回复。简而言之,流包含两次图像字节。 –

+0

如果我在保存图像后使用了dispose(),我得到了错误。就像在GDI +中发生了一个通用错误。 – user1934099