我们正在连接第三方系统(书籍简易),以便将信息导入我们的CMS。这个工作正常,直到上周,并抛出以下错误。我是.net的新手。所以任何帮助都会非常感激!
[IOException: The format of the specified network name is invalid.
]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7714920
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +1162
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +61
System.Net.FileWebStream..ctor(FileWebRequest request, String path, FileMode mode, FileAccess access, FileShare sharing, Int32 length, Boolean async) +65
System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint) +94
[WebException: The format of the specified network name is invalid.
]
System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint) +330
System.Net.FileWebRequest.GetResponseCallback(Object state) +260
[WebException: The format of the specified network name is invalid.
]
System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) +287
System.Net.WebClient.DownloadData(Uri address) +106
System.Net.WebClient.DownloadData(String address) +29
CoA.BookEasy.OperatorManager.GetRemoteFile(String url) in d:\Dev\ArmadaleVisitorCentre\CoA.BookEasy.OperatorImport\OperatorManager.cs:731
CoA.BookEasy.OperatorManager.SetFeatureImage(ContentVersion cv, List`1 list) in d:\Dev\ArmadaleVisitorCentre\CoA.BookEasy.OperatorImport\OperatorManager.cs:606
CoA.BookEasy.OperatorManager.ImportOperatorData(ContentVersion operatorCV, Int32 operatorId) in d:\Dev\ArmadaleVisitorCentre\CoA.BookEasy.OperatorImport\OperatorManager.cs:419
CoA.BookEasy.OperatorManager.ImportOperators(List`1 operatorIds, ContentVersion parentCV) in d:\Dev\ArmadaleVisitorCentre\CoA.BookEasy.OperatorImport\OperatorManager.cs:336
CoA.BookEasy.OperatorManager.ProcessContent(ProcessContentDelegate`1 processDelegate, List`1 toProcess, ContentVersion cv) in d:\Dev\ArmadaleVisitorCentre\CoA.BookEasy.OperatorImport\OperatorManager.cs:297
CoA.Admin.WebUI.CoA_BookeasyOperatorAdmin.ProcessContent(ProcessContentDelegate`1 processDelegate, List`1 toProcess, ContentVersion cv) in C:\dev\ArmadaleVisitorCentre\CoA.Admin.WebUI\CoA_BookeasyOperatorAdmin.aspx.cs:411
CoA.Admin.WebUI.CoA_BookeasyOperatorAdmin.CreateSelectedHere_Click(Object sender, EventArgs e) in C:\dev\ArmadaleVisitorCentre\CoA.Admin.WebUI\CoA_BookeasyOperatorAdmin.aspx.cs:193
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
这是相关代码: -
#region CRUD
public void ProcessContent<T>(ProcessContentDelegate<T> processDelegate, List<T> toProcess, ContentVersion cv)
{
//Only allow one thread to create at a time - that way ImportOperator() will catch any double-ups
//Using same thread locker that is used to cache the remote operators for added safety
lock (locker)
{
if (validation.Count == 0)
{
processDelegate(toProcess, cv);
}
}
}
private ContentVersion CreateChildPage(ContentVersion parentCV, ObjectType ot)
{
ContentVersion new_cv = null;
Content newPage = new Content();
SessionUser su = _user;
bool userCanCreateContent = AccessManager.GetInstance().CanPerformTask(su, "Create content");
if (userCanCreateContent)
{
ItemPermission ip = ItemPermissionManager.GetItemPermissionByContentVersion(parentCV);
bool canCreateType = (ip == null) ? true : ip.listObjectTypes.Contains<ObjectType>(ot);
if (canCreateType)
{
validation.AddRange(ContentManager.CreateNew(newPage, parentCV.objContent, ot, su, false));
if (validation.Count == 0)
{
new_cv = newPage.listVersions.LastOrDefault<ContentVersion>();
}
}
else
{
validation.Add("You cannot create a page of the type \"" + ot.name + "\" here.");
}
}
else
{
validation.Add("You do not have permission to create new pages.");
}
return new_cv;
}
public void ImportOperators(List<int> operatorIds, ContentVersion parentCV)
{
foreach (int operatorId in operatorIds)
{
ImportOperator(operatorId, parentCV);
if (validation.Count > 0)
{
break;
}
}
}
public void ImportOperators(List<BookeasyOperator> operators, ContentVersion parentCV)
{
foreach (BookeasyOperator o in operators)
{
ImportOperator(o.OperatorID, parentCV);
if (validation.Count > 0)
{
break;
}
}
}
private void ImportOperator(int operatorId, ContentVersion parentCV)
{
if (!cvsByBookeasyId.ContainsKey(operatorId))
{
ContentVersion new_cv = CreateChildPage(parentCV, ot);
if (validation.Count > 0)
{
return;
}
ImportOperatorData(new_cv, operatorId);
}
}
private void ImportOperatorData(ContentVersion operatorCV, int operatorId)
{
if (!operators.ContainsKey(operatorId))
{
validation.Add("The operator with the ID " + operatorId.ToString() + " does not seem to exist.");
return;
}
ContentVersion c = operatorCV;
BookeasyOperator o = operators[operatorId];
DataField df_Body = GetDataField(c, "Body");
DataField df_BookeasyOperatorID = GetDataField(c, "Bookeasy Operator ID");
DataField df_IsAutoUpdatedFromBookEasy = GetDataField(c, "Is Auto-Updated from BookEasy");
DataField df_FeatureImage = GetDataField(c, "Feature Image");
DataField df_Summary = GetDataField(c, "Summary");
DataField df_FirstName = GetDataField(c, "First Name");
DataField df_Surname = GetDataField(c, "Surname");
DataField df_BusinessName = GetDataField(c, "Business Name");
DataField df_OpeningHours = GetDataField(c, "Opening Hours");
DataField df_OpeningHoursDetails = GetDataField(c, "Opening Hours Details");
DataField df_Location = GetDataField(c, "Location");
DataField df_Email = GetDataField(c, "Email");
DataField df_Website = GetDataField(c, "Website");
DataField df_Phone = GetDataField(c, "Phone");
DataField df_Fax = GetDataField(c, "Fax");
DataField df_Mobile = GetDataField(c, "Mobile");
DataField df_OperatorType = GetDataField(c, "Operator Type");
DataField df_AccommodationGrouping = GetDataField(c, "Accommodation Grouping");
DataField df_SettingAndAtmosphere = GetDataField(c, "Setting and Atmosphere");
DataField df_Region = GetDataField(c, "Region");
DataField df_BusinessGrouping = GetDataField(c, "Business Grouping");
DataField df_Facilities = GetDataField(c, "Facilities");
DataField df_LastUpdatedByBookEasy = GetDataField(c, "Last Updated by BookEasy");
DataField df_IsMothership = GetDataField(c, "Is Mothership");
DataField df_TariffFrom = GetDataField(c, "Tariff From");
DataField df_TariffTo = GetDataField(c, "Tariff To");
DataField df_DepartureTime = GetDataField(c, "Departure Time");
DataField df_ArrivalTime = GetDataField(c, "Arrival Time");
DataField df_StarRating = GetDataField(c, "Star Rating");
DataField df_IsSelfRated = GetDataField(c, "Is Self Rated");
DataField df_Policies = GetDataField(c, "Policies");
DataField df_BookableTypes = GetDataField(c, "Bookable Types");
DataField df_HideContactDetails = GetDataField(c, "Hide Contact Details");
string content = OrDefault(o.PointOfDifference) + "\r\n\r\n" + OrDefault(o.Description);
content = CleanContent(content);
c.name = o.TradingName;
df_Body.value = HtmlifyContent(content);
df_BookeasyOperatorID.value = operatorId.ToString();
df_IsAutoUpdatedFromBookEasy.value = "Yes";
df_FeatureImage.value = SetFeatureImage(c, o.Pictures);
df_Summary.value = SummariseContent(content);
df_FirstName.value = OrDefault(o.FirstName);
df_Surname.value = OrDefault(o.Surname);
df_BusinessName.value = OrDefault(o.TradingName);
df_OpeningHours.value = OrDefault(o.Hours);
df_Email.value = OrDefault(o.Email);
df_Website.value = OrDefault(o.Website);
df_Phone.value = OrDefault(o.Telephone1);
df_Fax.value = OrDefault(o.Facsimile);
df_Mobile.value = OrDefault(o.Mobile);
df_Facilities.value = ListToSeamlessString(o.Facilities);
df_SettingAndAtmosphere.value = GetSettingAndAtmosphereAsSeamlessString(o);
df_BusinessGrouping.value = GetBusinessTypesAsSeamlessString(o);
df_IsMothership.value = (o.IsMothership) ? "Yes" : "No";
df_LastUpdatedByBookEasy.value = GetSeamlessTime(o.DateModified);
df_TariffFrom.value = OrDefault(o.TarriffFrom);
df_TariffTo.value = OrDefault(o.TarriffTo);
df_DepartureTime.value = OrDefault(o.DepartureTime);
df_ArrivalTime.value = OrDefault(o.ArrivalTime);
df_StarRating.value = GetStarRating(o.StarRating);
df_IsSelfRated.value = (o.IsSelfRated) ? "Yes" : "No";
df_Policies.value = CleanContent(o.Cancellation);
df_BookableTypes.value = ListToSeamlessString(o.BookableTypes);
df_HideContactDetails.value = (o.HideContactDetails) ? "Yes" : "No";
if (o.OperatorDetails != null)
{
OperatorDetailsShort od = o.OperatorDetails;
df_OperatorType.value = GetOperatorTypesAsSeamlessString(od.OperatorTypes);
df_AccommodationGrouping.value = ListToSeamlessString(od.OperatorGroupings);
df_Region.value = GetOperatorLocationsAsSeamlessString(od.Locations);
df_Location.value = SetLocation(o.TradingName, o.ResidentialAddress, od.Latitude, od.Longitude);
}
if (df_OperatorType.value == "") df_OperatorType.value = GetOperatorTypesAsSeamlessString(o);
if (df_AccommodationGrouping.value == "") df_AccommodationGrouping.value = GetAccommodationGroupingAsSeamlessString(o);
if (df_Region.value == "") df_Region.value = GetOperatorLocationsAsSeamlessString(o);
c.objTemplate = ct;
validation.AddRange(ContentVersionManager.Save(c));
validation.AddRange(WorkflowManager.SubmitItemVersionToStage(c, _user, "Created through Bookeasy Operator Import Manager", true, true, null, null, null, false));
}
public void UpdateOperators(List<int> operatorIds, ContentVersion ignoredForDelegate)
{
UpdateOperators(operatorIds);
}
private void UpdateOperators(List<int> operatorIds)
{
foreach (int operatorId in operatorIds)
{
UpdateOperator(operatorId);
/*
* Actually Allow this to continue, even if one page fails - should be non-fatal and just report on errors
if (validation.Count > 0)
{
break;
}*/
}
}
private void UpdateOperator(int operatorId)
{
if (cvsByBookeasyId.ContainsKey(operatorId))
{
foreach (OperatorDecisionHelper odh in cvsByBookeasyId[operatorId])
{
UpdateOperatorData(odh);
/*
* Actually Allow this to continue, even if one page fails - should be non-fatal and just report on errors
if (validation.Count > 0)
{
return;
}*/
}
}
}
private void UpdateOperatorData(OperatorDecisionHelper odh)
{
ContentVersion NewVersion = new ContentVersion();
validation.AddRange(ContentVersionManager.MakeCopy(NewVersion, ContentVersionManager.Get(odh.ContentVersion.id), _user, false));
NewVersion.sequence = odh.ContentVersion.sequence;
NewVersion.objContentParent = odh.ContentVersion.objContentParent;
NewVersion.versionNumber = odh.ContentVersion.versionNumber + 1;
ImportOperatorData(NewVersion, odh.BookEasyOperatorId);
}
public void ArchiveOperators(List<Guid> cvIds, ContentVersion ignoredForDelegate)
{
ArchiveOperators(cvIds);
}
private void ArchiveOperators(List<Guid> cvIds)
{
foreach (Guid cvId in cvIds)
{
ArchiveOperator(cvId);
if (validation.Count > 0)
{
break;
}
}
}
private void ArchiveOperator(Guid cvid)
{
ContentVersion cv = ContentVersionManager.Get(cvid);
if (cv != null)
{
validation.AddRange(ContentManager.Archive(cv.objContent.id));
}
}
#endregion
#region Operator Content Management
#region Location Management
private string SetLocation(string name, string address, double lat, double lon)
{
if (name == null || address == null || name == "" || address == "" || lat == 0 || lon == 0)
{
return "";
}
string parentLink = "$" + _user.currentGroup.id.ToString() + "$" + "/Tools/Locations";
string link = parentLink + "/" + FormatTools.StripAndReplaceURLUnfriendlyChars(name);
ContentVersion LocationCv = ContentVersionManager.GetActiveByLink(link).FirstOrDefault<ContentVersion>();
if (LocationCv == null)
{
ContentVersion parent_cv = ContentVersionManager.GetActiveByLink(parentLink).FirstOrDefault<ContentVersion>();
if (parent_cv != null)
{
LocationCv = CreateNewLocation(parent_cv, name, address, lat, lon);
}
else
{
return "";
}
}
return string.Concat(HttpContext.Current.Server.HtmlEncode(name), FormatTools.KEY_VALUE_PAIR_DELIMITER, LocationCv.link, FormatTools.KEY_VALUE_PAIR_DELIMITER, "newwindow");
//return LocationCv.link;
}
private ContentVersion CreateNewLocation(ContentVersion parent, string name, string address, double lat, double lon)
{
ObjectType ot = ObjectTypeManager.GetByName("Location");
ContentVersion new_cv = CreateChildPage(parent, ot);
DataField df_address = GetDataField(new_cv, "Location Street Address");
DataField df_lat = GetDataField(new_cv, "Location Latitude");
DataField df_lon = GetDataField(new_cv, "Location Longitude");
try
{
df_address.value = address;
df_lat.value = lat.ToString();
df_lon.value = lon.ToString();
new_cv.name = name;
validation.AddRange(ContentVersionManager.Save(new_cv));
validation.AddRange(WorkflowManager.SubmitItemVersionToStage(new_cv, _user, "Created through Location panel", true, true, null, null, null, false));
return new_cv;
}
catch
{
}
return null;
}
#endregion
#region Feature Image Management
private string SetFeatureImage(ContentVersion cv, List<string> list)
{
if (list == null || list.Count == 0) return "";
string RemoteURL = list[0];
string LocalURL = "";
Uri uri = new Uri(RemoteURL);
string filename = Path.GetFileName(uri.LocalPath);
MemoryStream file = GetRemoteFile(RemoteURL);
if (file != null)
{
LocalURL = WriteOutputSeamlessFile(cv, filename, file);
}
return LocalURL;
}
private string WriteOutputSeamlessFile(ContentVersion cv, string filename, MemoryStream ms)
{
Seamless.CMS.File OutputFile;
string LocalURL = "";
bool CreateNewFile = true;
ObjectType ot = ObjectTypeManager.GetByName("Image");
List<FileVersion> fvList = new List<FileVersion>();
foreach (Seamless.CMS.File file in cv.listFilesOwned)
{
FileVersion fv = FileVersionManager.GetFileLatest(file.id);
if (fv != null)
{
fvList.Add(fv);
}
}
FileVersion outputFv = fvList.FirstOrDefault<FileVersion>(pfv => pfv.name == filename);
if (outputFv != null)
{
string fileID = outputFv.id.ToString();
string physicalLocation = CMSSettings.physicalAssetDirFile + fileID;
if (System.IO.File.Exists(physicalLocation))
{
FileStream fs = new FileStream(physicalLocation, FileMode.Open);
HashAlgorithm ha = (HashAlgorithm)CryptoConfig.CreateFromName("SHA1");
Int64 fsh = BitConverter.ToInt64(ha.ComputeHash(fs), 0);
Int64 msh = BitConverter.ToInt64(ha.ComputeHash(ms), 0);
CreateNewFile = (fsh != msh);
}
if (CreateNewFile)
{
cv.listFilesOwned.Remove(outputFv.objFile);
}
}
if (CreateNewFile)
{
OutputFile = FileManager.CreateNew((Folder)null, _user, false, ot);
OutputFile.listVersions[0].name = filename;
OutputFile.listVersions[0].objCheckedOutBy = null;
string fileID = OutputFile.listVersions[0].id.ToString();
string physicalLocation = CMSSettings.physicalAssetDirFile + fileID;
try
{
FileStream fs = new FileStream(physicalLocation, FileMode.Create);
ms.WriteTo(fs);
LocalURL = FinaliseOutputFile(cv, OutputFile, filename);
}
catch
{
ExceptionManager.Log("Could not generate feature image for: " + cv.name);
}
}
else
{
LocalURL = getURLFromFilenameAndID(outputFv.objFile.id, filename);
}
return LocalURL;
}
private Seamless.CMS.File GetOutputSeamlessFile(ContentVersion cv, string filename)
{
ObjectType ot = ObjectTypeManager.GetByName("Image");
Seamless.CMS.File OutputFile;
List<FileVersion> fvList = new List<FileVersion>();
foreach (Seamless.CMS.File file in cv.listFilesOwned)
{
FileVersion fv = FileVersionManager.GetFileLatest(file.id);
if (fv != null)
{
fvList.Add(fv);
}
}
FileVersion outputFv = fvList.FirstOrDefault<FileVersion>(pfv => pfv.name == filename);
if (outputFv != null)
{
cv.listFilesOwned.Remove(outputFv.objFile);
}
OutputFile = FileManager.CreateNew((Folder)null, _user, false, ot);
OutputFile.listVersions[0].name = filename;
OutputFile.listVersions[0].objCheckedOutBy = null;
return OutputFile;
}
private string FinaliseOutputFile(ContentVersion cv, Seamless.CMS.File OutputFile, string filename)
{
SessionUser su = _user;
FileInfo fi = new FileInfo(CMSSettings.physicalAssetDirFile + OutputFile.listVersions[0].id.ToString());
OutputFile.listVersions[0].size = (int)fi.Length;
OutputFile.listVersions[0].objWorkflow = null;
OutputFile.listVersions[0].isPublished = true;
OutputFile.listVersions[0].activateDate = DateTime.Now;
OutputFile.listVersions[0].deactivateDate = DateTime.MaxValue;
OutputFile.listVersions[0].isRolledback = false;
FileVersionManager.Save(OutputFile.listVersions[0]);
OutputFile.objGroup = su.currentGroup;
OutputFile.objOwnerContentVersion = cv;
OutputFile.isArchived = false;
FileManager.Save(OutputFile);
if (!cv.listFilesOwned.Contains(OutputFile))
{
cv.listFilesOwned.Add(OutputFile);
}
return getURLFromFilenameAndID(OutputFile.id, filename);
}
private string getURLFromFilenameAndID(Guid guid, string filename)
{
return "files/" + guid.ToString() + "/" + filename + FormatTools.KEY_VALUE_PAIR_DELIMITER.ToString();
}
private MemoryStream GetRemoteFile(string url)
{
MemoryStream file;
WebClient client = new WebClient();
try
{
file = new MemoryStream(client.DownloadData(url));
}
finally
{
client.Dispose();
}
return file;
}
#endregion