2013-01-08 3 views
0

매개 변수가 잘못되었습니다.이 문제를 해결하려면 error.how?매개 변수가 잘못되었습니다.

다음 코드는 내가에 다음과 같은 클라이언트 응용 프로그램을 사용하여이 이러한 코드에 대한 유효하지 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> 

입니다 이러한 코드 메신저 점점 매개 변수에 서버 측

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

입니다 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

예외가 발생한 행을 알려주십시오. 또한 스택 추적을 제공해주십시오.

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

또한, 문자열이를 나타내지 않는 : 다음은 내가

이 줄은 유효 C#을 구문 아닙니다 ... 당신이 게시 코드에 잠깐 눈에서보고 있어요 것입니다 IP 주소이므로 IPAddress 유형의 개체에 할당 할 수 없습니다. 나는 IPAddress이 변수 이름이 아니라고 가정하고 있는데, C#의 명명 규칙에서 변수 이름은 작은 문자로 시작해야합니다.

그 외에도 코드에는 결함이 있습니다. 당신은 이미지를 만들고 나서 그것을 버리고 저장하려고합니다. 처리, 저장, 작성 : 심지어

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

편집

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

그것은 다른 방법으로해야한다 스트림에서 이미지를로드하는 선은 오류를 던집니다. 이것은 당신이 확인해야 다음에 이르게 :

그것은이다 중복 (그리고 귀하의 경우에도 오류가) 다음 두 줄을 실행합니다 :

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

관련 문제