วิธีการอัปโหลดแฟ้มไปยังเว็บเซิร์ฟเวอร์ใน ASP.NET โดยใช้ Visual C# .NET

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 323246 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความทีละขั้นตอนนี้อธิบายถึงวิธีการอัปโหลดแฟ้มไปยังเว็บเซิร์ฟเวอร์ โดยใช้ Visual C# .NET ในบทความนี้ คุณสามารถสร้างแฟ้ม Microsoft ASP.NET (WebForm1.aspx) และแฟ้มของรหัสที่เกี่ยวข้องล่าช้า (WebForm1.aspx.cs) เมื่อต้องการอัปโหลดแฟ้มไปยังไดเรกทอรีที่ชื่อข้อมูล


สร้างโปรแกรมประยุกต์ ASP.NET

ใน Microsoft Visual Studio .NET ให้ทำตามขั้นตอนเหล่านี้เพื่อสร้างโปรแกรมประยุกต์ใหม่เพื่ออัปโหลดแฟ้มไปยังเว็บเซิร์ฟเวอร์:
  1. เริ่ม Microsoft Visual Studio .NET
  2. บนเมนูแฟ้มชี้ไปที่สร้างแล้ว คลิ กโครงการ
  3. ในกล่องโต้ตอบโครงการใหม่คลิกโครงการ Visual C#ภายใต้ชนิดโครงการและจากนั้น คลิกโปรแกรมประยุกต์บนเว็บ ASP.NETภายใต้แม่แบบ
  4. ในกล่องตำแหน่งพิมพ์ URL เพื่อสร้างโครงการ สำหรับตัวอย่างนี้ พิมพ์http://localhost/CSharpUploadซึ่งสร้างชื่อ defaultproject CSharpUpload โปรดสังเกตว่า แฟ้ม WebForm1.aspx โหลดในมุมมอง theDesigner ของ Visual Studio .NET

สร้างไดเรกทอรีข้อมูล

หลังจากที่คุณสร้างแอพลิเคชัน สร้างไดเรกทอรีของข้อมูลที่จะยอมรับการอัปโหลดแฟ้ม หลังจากที่คุณสร้างไดเรกทอรีนี้ คุณต้องกำหนดสิทธิ์สำหรับบัญชี ASPNET ผู้ปฏิบัติงานในการเขียน
  1. ในหน้าต่าง Explorer โซลูชันของ Visual Studio .NET ขวาคลิCSharpUploadชี้ไปที่เพิ่มและจากนั้น คลิกสร้างโฟลเดอร์ โดยค่าเริ่มต้น โฟลเดอร์ใหม่ที่ชื่อ NewFolder1 iscreated
  2. เมื่อต้องการเปลี่ยนชื่อโฟลเดอร์ข้อมูล คลิกขวาNewFolder1คลิกเปลี่ยนชื่อและจากนั้น พิมพ์ ข้อมูล.
  3. เริ่ม Windows Explorer และจากนั้น ระบุตำแหน่งที่ตั้งโฟลเดอร์ระบบแฟ้มข้อมูลที่คุณสร้างไว้ในขั้นตอนที่ 2 โดยค่าเริ่มต้น โฟลเดอร์นี้จะอยู่ในโฟลเดอร์ต่อไปนี้:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. เมื่อต้องการเปลี่ยนการตั้งค่าความปลอดภัย เพื่อให้เขียน permissionsto ไดเรกทอรีข้อมูลข้อมูลคลิกขวา แล้ว คลิกคุณสมบัติ
  5. ในกล่องโต้ตอบคุณสมบัติของข้อมูลคลิกแท็บความปลอดภัยและจากนั้น คลิกเพิ่ม
  6. ในกล่องโต้ตอบการเลือกผู้ใช้หรือกลุ่มคลิกบัญชีผู้ใช้ASPNETและจากนั้น คลิกเพิ่ม คลิกตกลงเพื่อปิด dialogbox การเลือกผู้ใช้หรือกลุ่ม
  7. คลิก (บัญชี aspnet_wpชื่อคอมพิวเตอร์\ASPNET) บัญชี และคลิกเพื่อเลือกการอนุญาตกล่องกาเครื่องหมายเพื่อใช้สิทธิ์ต่อไปนี้:

    • อ่าน และปฏิบัติการ
    • แสดงเนื้อหาโฟลเดอร์
    • อ่าน
    • เขียน

    คลิกเพื่อล้างข้อมูลใด ๆ อื่น ๆอนุญาตและปฏิเสธกล่องกาเครื่องหมาย
  8. คลิกตกลงเพื่อปิดกล่องโต้ตอบคุณสมบัติของข้อมูล คุณได้ปรับเปลี่ยนแบบ directorypermissions ข้อมูลให้ผู้ใช้อัปโหลดแฟ้มที่ยอมรับเสร็จเรียบร้อยแล้ว

ปรับเปลี่ยนเพ WebForm1.aspx

เมื่อต้องการปรับเปลี่ยนโค้ด HTML ของแฟ้ม WebForm1.aspx เพื่ออนุญาตให้ผู้ใช้สามารถอัปโหลดแฟ้ม ให้ทำตามขั้นตอนเหล่านี้:
  1. กลับไปยังอินสแตนซ์ของ Visual Studio .NET ที่เปิดWebForm1.aspx ควรจะเปิดในหน้าต่างตัวออกแบบ
  2. ดูโค้ดต้นฉบับ HTML ของเพ WebForm1.aspx, WebForm1.aspxในหน้าต่างตัวออกแบบ คลิกครั้งขวา เมื่อ ต้อง การดูโค้ดต้นฉบับ HTML
  3. หาตำแหน่งที่ตั้งต่อไปนี้โค้ด HTML ซึ่งประกอบด้วยการ<form>แท็ก:</form>
    <form id="Form1" method="post" runat="server">
    					
  4. เพิ่มการenctype = "หลายส่วน / -ข้อมูลฟอร์ม"แอตทริบิวต์ชื่อค่าไป<form>แท็กดังนี้:</form>
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    					
  5. หลังจากการเปิด<form>แท็ก เพิ่มรหัสต่อไปนี้:</form>
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    					
  6. ตรวจสอบว่า HTML<form>แท็กปรากฏขึ้นเป็นดังนี้:</form>
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    </form>
    					

เพิ่มรหัสการอัปโหลดแฟ้ม WebForm1.aspx.cs รหัสล่าช้า

เมื่อต้องการปรับเปลี่ยนแฟ้ม WebForm1.aspx.cs รหัสข้างหลังเพื่อให้ยอมรับการอัปโหลดข้อมูล ให้ทำตามขั้นตอนเหล่านี้:
  1. บนเมนูมุมมองคลิกออกแบบ
  2. คลิกสองครั้งที่อัปโหลด Visual Studio รหัส WebForm1.aspx.cs-ข้างหลังเปิดแฟ้ม andautomatically สร้างรหัสวิธีการต่อไปนี้:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    
    
    }
  3. ตรวจสอบว่า รหัสต่อไปนี้มีอยู่ในระดับชั้นของไฟล์ WebForm1.cs:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;
    protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
    						
    ถ้าไม่มีรหัสนี้อยู่ในแฟ้ม เพิ่มรหัสไปยัง fileafter บรรทัดต่อไปนี้:
    public class WebForm1 : System.Web.UI.Page
    {
    					
  4. ค้นหาตำแหน่งของรหัสต่อไปนี้:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    					
  5. กด ENTER เพื่อเพิ่มบรรทัดว่างเปล่า แล้ว เพิ่ม followingcode:
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    {
    	string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    	string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
    	try
    	{
    		File1.PostedFile.SaveAs(SaveLocation);
    		Response.Write("The file has been uploaded.");
    	}
    	catch ( Exception ex )
    	{
    		Response.Write("Error: " + ex.Message);
    		//Note: Exception.Message returns a detailed message that describes the current exception. 
    		//For security reasons, we do not recommend that you return Exception.Message to end users in 
    		//production environments. It would be better to put a generic error message. 
    	}
    }
    else
    {
    	Response.Write("Please select a file to upload.");
    }
    รหัสนี้ก่อนตรวจสอบว่า แฟ้มได้ถูกอัปโหลด ถ้าไม่มีแฟ้ม wasselected คุณได้รับข้อความ "โปรดเลือกแฟ้มที่จะอัปโหลด" ถ้า validfile จะอัปโหลด ชื่อแฟ้มจะถูกแยก โดยใช้System.IO namespace และปลายทางของจะรวมอยู่ในเส้นทางSaveAs หลังจากนี้เรียกว่าปลายทางสุดท้าย คือแฟ้มบันทึก byusing วิธีการFile1.PostedFile.SaveAs ข้อยกเว้นใด ๆ จนไม่ และ isdisplayed ข้อความข้อยกเว้นที่บนหน้าจอ
  6. ตรวจสอบว่า ของ subroutine Submit1ที่ปรากฏเป็นดังนี้:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    	if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    	{
    		string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    		string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
    		try
    		{
    			File1.PostedFile.SaveAs(SaveLocation);
    			Response.Write("The file has been uploaded.");
    		}
    		catch ( Exception ex )
    		{
    			Response.Write("Error: " + ex.Message);
    			//Note: Exception.Message returns detailed message that describes the current exception. 
    			//For security reasons, we do not recommend you return Exception.Message to end users in 
    			//production environments. It would be better just to put a generic error message. 
    		}
    	}
    	else
    	{
    		Response.Write("Please select a file to upload.");
    	}
    }

ทดสอบโปรแกรมประยุกต์

เมื่อ ต้องสร้างโซลูชันของ Visual Studio .NET และทดสอบแอพลิเคชัน ให้ทำตามขั้นตอนเหล่านี้:
  1. บนเมนูสร้างคลิกสร้างโซลูชัน
  2. ในโซลูชัน Explorer, WebForm1.aspxคลิกขวา ความแสดงในเบราว์เซอร์
  3. หลังจากเปิด WebForm1.aspx ในเบราว์เซอร์ คลิกเรียกดู
  4. ในกล่องโต้ตอบเลือกแฟ้มเลือกแฟ้มที่มีขนาดเล็กกว่า 4 เมกะไบต์ (MB), แล้ว คลิ กเปิด
  5. เมื่อต้องการอัปโหลดแฟ้ม คลิกอัปโหลด โปรดสังเกตว่า แฟ้มที่อัปโหลดไปยังเว็บเซิร์ฟเวอร์และ youreceive ที่ข้อความ "ได้ถูกอัปโหลดแฟ้ม"
  6. กลับไปที่อินสแตนซ์ของ Windows Explorer และ thenlocate ที่เปิดไดเรกทอรีข้อมูล
  7. ตรวจสอบว่า แฟ้มได้ถูกอัปโหลดไป Datadirectory

อัปโหลดแฟ้มที่มีขนาดใหญ่ขึ้น

โดยค่าเริ่มต้น ASP.NET เท่านั้นอนุญาตให้แฟ้มที่ 4096 กิโลไบต์ (KB) (หรือ 4 MB) หรือน้อยกว่าจะถูกอัพโหลดไปยังเว็บเซิร์ฟเวอร์ เมื่อต้องการอัปโหลดแฟ้มที่มีขนาดใหญ่ขึ้น คุณต้องเปลี่ยนพารามิเตอร์maxRequestLengthของการ<httpRuntime></httpRuntime>ส่วนในแฟ้ม Web.config

หมายเหตุ เมื่อตั้งค่าแอตทริบิวต์maxRequestLengthในแฟ้ม Machine.config และจากนั้น การลงรายการบัญชีคำขอ (ตัวอย่างเช่น การอัปโหลดแฟ้ม) ที่เกินกว่าค่าของmaxRequestLengthไม่สามารถแสดงหน้าข้อผิดพลาดแบบกำหนดเอง แทน Microsoft Internet Explorer จะแสดงข้อความแสดงข้อผิดพลาด "ไม่พบเซิร์ฟเวอร์หรือ DNS"

ถ้าคุณต้องการเปลี่ยนการตั้งค่านี้สำหรับคอมพิวเตอร์และโปรแกรมประยุกต์ ASP.NET ไม่ใช่แค่นี้ทั้งหมด คุณต้องปรับเปลี่ยนแฟ้ม Machine.config

โดยค่าเริ่มต้น การ<httpRuntime></httpRuntime>องค์ประกอบถูกตั้งค่าให้กับพารามิเตอร์ต่อไปนี้ในแฟ้ม Machine.config:
<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
				
แฟ้ม Machine.config อยู่ในนี้ \รากของระบบ\Microsoft.NET\Framework\หมายเลขรุ่นไดเรกทอรี \CONFIG


รายการรหัสโดยสมบูรณ์

WebForm1.aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CSharpUpload.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name=vs_defaultClientScript content="JavaScript">
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" >
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" NAME="Submit1">
</form>

	
  </body>
</HTML>
				

WebForm1.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace CSharpUpload
{
	/// <summary>
	/// Summary description for WebForm1.
	/// </summary>
	public class WebForm1 : System.Web.UI.Page
	{
		protected System.Web.UI.HtmlControls.HtmlInputFile File1;
		protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
	
		private void Page_Load(object sender, System.EventArgs e)
		{
			// Put user code to initialize the page here
		}

		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			// 
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			// 
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{    
			this.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		private void Submit1_ServerClick(object sender, System.EventArgs e)
		{
			if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
			{
				string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
				string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
				try
				{
					File1.PostedFile.SaveAs(SaveLocation);
					Response.Write("The file has been uploaded.");
				}
				catch ( Exception ex )
				{
					Response.Write("Error: " + ex.Message);
					//Note: Exception.Message returns a detailed message that describes the current exception. 
					//For security reasons, we do not recommend that you return Exception.Message to end users in 
					//production environments. It would be better to return a generic error message. 
				}
			}
			else
			{
				Response.Write("Please select a file to upload.");
			}
		}
	}
}
	

ข้อมูลเพิ่มเติม

ใน ขนาดการอัปโหลดแฟ้มสูงสุดมีขนาดใหญ่ค่อนข้าง อย่างไรก็ตาม เนื่องจาก ASP.NET ตรวจสอบสถานภาพ คุณไม่สามารถอัปโหลดแฟ้มที่มีขนาดใหญ่มากใน ASP.NET กระบวนการของผู้ปฏิบัติงาน ASP.NET มีช่องว่างที่อยู่เสมือนของ 2 กิกะไบต์ (GB) อย่างไรก็ตาม กระบวนการของผู้ปฏิบัติงาน ASP.NET ใช้เฉพาะเล็กน้อยกว่า 1 GB ได้เนื่องจาก มีการกระจายตัวของหน่วยความจำและการตรวจสอบความสมบูรณ์

ในระหว่างกระบวนการอัปโหลด ASP.NET โหลดแฟ้มทั้งหมดในหน่วยความจำก่อนที่ผู้ใช้สามารถบันทึกแฟ้มลงในดิสก์ ดังนั้น กระบวนการอาจไซเนื่องจากแอตทริบิวต์memoryLimitprocessModelแท็กในแฟ้ม Machine.config แอตทริบิวต์memoryLimitระบุเปอร์เซ็นต์ของหน่วยความจำทางกายภาพที่ผู้ปฏิบัติงาน ASP.NET ประมวลผลสามารถ exhaust ก่อนที่กระบวนการจะนำโดยอัตโนมัติหรือไม่ กลับทำให้หน่วยความจำรั่วจากสาเหตุของ ASP.NET จะล้มเหลว หรือหยุดการตอบสนอง

นอกจากนี้ ปัจจัยอื่น ๆ ดีขึ้นในขนาดแฟ้มสูงสุดที่สามารถอัพโหลด ปัจจัยเหล่านี้รวมถึงหน่วยความจำที่พร้อมใช้งาน เนื้อที่บนฮาร์ดดิสก์ที่พร้อมใช้งาน ความเร็วของตัวประมวลผล และเครือข่ายปัจจุบัน โดยปกติการรับส่งข้อมูลของแฟ้มที่กำลังอัปโหลด Microsoft แนะนำให้ คุณใช้ขนาดแฟ้มสูงสุดในช่วง 10 ถึง 20 เมกะไบต์ (MB) ถ้าคุณไม่ค่อยอัพโหลดไฟล์ ขนาดแฟ้มสูงสุดอาจเป็น 100 เมกะไบต์

หมายเหตุ คุณสามารถอัปโหลดแฟ้มที่มีขนาดใหญ่กว่า 100 เมกะไบต์ใน ASP.NET อย่างไรก็ตาม Microsoft แนะนำให้ คุณปฏิบัติตามขนาดการอัปโหลดแฟ้มสูงสุดที่กล่าวถึงในบทความนี้ การตรวจสอบขนาดแฟ้มที่ชัดเจนมากขึ้น ทำความเค้นการทดสอบบนคอมพิวเตอร์ที่มีลักษณะคล้ายกับอยู่ที่จะใช้ในการผลิต

คุณอาจสังเกตเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้ถ้าคุณพบขนาดจำกัดของแฟ้มในระหว่างกระบวนการอัปโหลดแฟ้ม:
  • เพจที่ไม่สามารถ bedisplayed
  • เซิร์ฟเวอร์แอพลิเคชัน isUnavailable
    ในแฟ้มบันทึกเหตุการณ์ ข้อผิดพลาดนี้จะคล้ายกับ thefollowing:

    aspnet_wp.exe(PID:PIDNumber) ถูกนำเนื่องจากเกิน memoryconsumption ตัว SizeLimit (เมกะไบต์เปอร์เซ็นต์ เปอร์เซ็นต์ของ availableRAM)

  • การ typeSystem.OutOfMemoryException ยกเว้น
นอกจากนี้คุณอาจพบว่า การอัปโหลดเกิดขึ้นช้ามาก ถ้าคุณดูกระบวนการ Aspnet_wp.exe ในตัวจัดการงานของ Windows คุณจะสังเกตเห็นว่า เดลต้าหน่วยความจำที่เปลี่ยนแปลง โดย 64 กิโลไบต์ทุก ๆ 1 ถึง 2 วินาที ขึ้นอยู่กับขนาดของแฟ้ม หน่วงเวลานี้อาจทำให้กระบวนการของผู้ปฏิบัติงาน ASP.NET รีไซเคิลได้เนื่องจากมีข้อผิดพลาด responseDeadlock

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม โปรดเยี่ยมชมไซต์เว็บต่อไปนี้ของ Microsoft Developer Network (MSDN)
<httpRuntime>องค์ประกอบ</httpRuntime>
http://msdn2.microsoft.com/en-us/library/e1f13641 (vs.71).aspx

องค์ประกอบป้อนเข้า | วัตถุการนำเข้า
http://msdn.microsoft.com/en-us/library/ms535260 (VS.85).aspx

แอตทริบิวต์ ENCTYPE | คุณสมบัติ enctype
http://msdn2.microsoft.com/en-us/library/ms533745.aspx

คลา HtmlInputFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile (vs.71).aspx

คุณสมบัติ HtmlInputFile.PostedFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile.postedfile (vs.71).aspx

คุณสมบัติ

หมายเลขบทความ (Article ID): 323246 - รีวิวครั้งสุดท้าย: 7 มีนาคม 2557 - Revision: 5.0
ใช้กับ
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Keywords: 
kbhowtomaster kbmt KB323246 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:323246

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com