博客 (628)

  1. HttpHelper类:

    using System;
    using System.Collections.Specialized;
    using System.IO;
    using System.Net;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public static class HttpHelper
        {
            private static readonly Encoding DEFAULTENCODE = Encoding.UTF8;
    
            /// <summary>
            /// HttpUploadFile
            /// </summary>
            /// <param name="url"></param>
            /// <param name="file"></param>
            /// <param name="data"></param>
            /// <returns></returns>
            public static string HttpUploadFile(string url, string file, NameValueCollection data)
            {
                return HttpUploadFile(url, file, data, DEFAULTENCODE);
            }
    
            /// <summary>
            /// HttpUploadFile
            /// </summary>
            /// <param name="url"></param>
            /// <param name="file"></param>
            /// <param name="data"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static string HttpUploadFile(string url, string file, NameValueCollection data, Encoding encoding)
            {
                return HttpUploadFile(url, new string[] { file }, data, encoding);
            }
    
            /// <summary>
            /// HttpUploadFile
            /// </summary>
            /// <param name="url"></param>
            /// <param name="files"></param>
            /// <param name="data"></param>
            /// <returns></returns>
            public static string HttpUploadFile(string url, string[] files, NameValueCollection data)
            {
                return HttpUploadFile(url, files, data, DEFAULTENCODE);
            }
    
            /// <summary>
            /// HttpUploadFile
            /// </summary>
            /// <param name="url"></param>
            /// <param name="files"></param>
            /// <param name="data"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static string HttpUploadFile(string url, string[] files, NameValueCollection data, Encoding encoding)
            {
                string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
                byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
                byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
    
                //1.HttpWebRequest
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ContentType = "multipart/form-data; boundary=" + boundary;
                request.Method = "POST";
                request.KeepAlive = true;
                request.Credentials = CredentialCache.DefaultCredentials;
    
                using (Stream stream = request.GetRequestStream())
                {
                    //1.1 key/value
                    string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
                    if (data != null)
                    {
                        foreach (string key in data.Keys)
                        {
                            stream.Write(boundarybytes, 0, boundarybytes.Length);
                            string formitem = string.Format(formdataTemplate, key, data[key]);
                            byte[] formitembytes = encoding.GetBytes(formitem);
                            stream.Write(formitembytes, 0, formitembytes.Length);
                        }
                    }
    
                    //1.2 file
                    string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
                    byte[] buffer = new byte[4096];
                    int bytesRead = 0;
                    for (int i = 0; i < files.Length; i++)
                    {
                        stream.Write(boundarybytes, 0, boundarybytes.Length);
                        string header = string.Format(headerTemplate, "file" + i, Path.GetFileName(files[i]));
                        byte[] headerbytes = encoding.GetBytes(header);                    
                        stream.Write(headerbytes, 0, headerbytes.Length);
                        using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read))
                        {                        
                            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                            {
                                stream.Write(buffer, 0, bytesRead);
                            }
                        }
                    }
    
                    //1.3 form end
                    stream.Write(endbytes, 0, endbytes.Length);
                }
                //2.WebResponse
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                using (StreamReader stream = new StreamReader(response.GetResponseStream()))
                {
                    return stream.ReadToEnd();
                }
            }
        }
    }
  2. 调用示例:

    using System;
    using System.Collections.Specialized;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                NameValueCollection data = new NameValueCollection();
                data.Add("name", "木子屋");
                data.Add("url", "http://www.mzwu.com/");
                Console.WriteLine(HttpHelper.HttpUploadFile("http://localhost/Test", new string[] { @"E:\Index.htm", @"E:\test.rar" }, data));
    
                Console.ReadKey();
            }
        }
    }
转自 木子屋 4 年前
3,036

未能连接到远程计算机。请确保在远程计算机上安装了 Web Deploy 并启动了所需的进程(“Web Management Service”)。  在以下位置了解更多信息: https://go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION_NOT_REACHABLE。

远程服务器返回错误: (404) 未找到。

确保远程服务器上已安装 Web 服务管理,并使用以下命令启动服务:

net start wmsvc & net start msdepsvc


xoyozo 4 年前
3,283

已使用指定的进程(“Web Management Service”)连接到远程计算机,但未能验证服务器的证书。如果你信任该服务器,请再次连接并允许不信任的证书。  在以下位置了解更多信息: https://go.microsoft.com/fwlink/?LinkId=221672#ERROR_CERTIFICATE_VALIDATION_FAILED。

基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

根据验证过程,远程证书无效。


image.pngimage.pngimage.png

xoyozo 4 年前
3,086

打开注册表编辑器(regedit)

展开到:\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Cloud

删除:

default$windows.data.bluelightreduction.bluelightreductionstate

default$windows.data.bluelightreduction.settings

重启计算机

image.png

xoyozo 4 年前
4,352

“Web 部署”方式发布 ASP.NET Core 网站项目可解决发布到本地文件夹再通过 FTP 上传到 IIS 中会遇到的文件被锁定/占用的问题。相对于手动停止网站甚至结束进程来说,Web 部署更为方便。

  1. 服务器管理器 - 添加角色和功能 - 服务器角色 - Web 服务器(IIS) - 管理工具 - 管理服务

    image.png

  2. 安装 Web Deploy

    下载 Web 部署,安装时选择“完整”

    image.png

  3. 在“服务”中设置“Web Management Service”和“Web 部署代理服务”自动启用。(若没有找到“Web 部署代理服务”,检查安装 Web Deploy 时是否勾选全部)

    image.png

  4. IIS 管理器 - 管理服务 - 启用远程连接

    image.pngimage.png

    这里我们不使用 Windows 凭据(本地用户),而使用 IIS 管理器用户。

    端口默认 8172,需要在防火墙中允许该端口。在阿里云 ECS 的安全组规则中添加该端口允许。如需修改端口参此文

    image.pngimage.png

  5. 创建 IIS 管理器用户

    image.png

    打开后右侧添加用户,以“iisWebDeploy”为例

    image.png

  6. 配置 IIS 管理器权限

    选择单个网站

    image.pngimage.png

  7. 给整个网站目录添加 LOCAL SERVICE 的完全控制权限 2023年在 Windows Server 2022 上未设置 LOCAL SERVICE 的权限也能部署成功,所以忽略此步骤!2024年同样在 Windows Server 2022 上未设置 LOCAL SERVICE 部署失败,设置后部署成功。

    image.png

  8. 发布

    image.pngimage.pngimage.pngimage.png

  9. 【建议】设置用户 WDeployAdmin 与 WDeployConfigWriter 的密码永不过期,否则会遇到:在远程计算机上处理请求时出错。



一些已知错误的解决办法:

  • 若遇到已下载的 Microsoft SQL Server 2012 Transact-SQL ScriptDom 签名验证失败,手动下载安装即可:Microsoft SQL Server 2012 SP4 功能包,选择 SqlDom.msi(有两个同名文件,感觉上尺寸较大的应该是 x64,我没有具体对比,安装大的成功了)。

  • 若遇到 SQL Server 2012 SP1 Shared Management Object (x86 / x64) 下载失败,同样点击上面的链接,选择 SharedManagementObjects.msi 下载安装。

  • Web Deploy 安装失败,如果 Web Deploy for Hosting Servers 下载失败,可以尝试安装 Web Deploy without bundled SQL support (last)。

  • 如果是新项目,记得在 IIS 对应的网站中添加“IIS 管理器权限”中添加用户。

  • 连接对话框中的“站点名称”或“网站名”必须与 IIS 中的网站名称一致。

  • 还是无法连接?查看 IIS 管理服务中的 SSL 证书是否过期。

  • Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。检查输出窗口了解更多详细信息。尝试在“控制面板-卸载或更改程序”中修复 Microsoft Web Deploy 程序。

xoyozo 4 年前
4,394

错误Web 部署任务失败。 (无法为指定目录执行操作(“创建文件”)。如果服务器果管理员没有为你使用的用户凭据授予执行此操作的权限,则会发生这种情况。

  在以下位置了解更多信息: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER。  在以下位置了解更多信息: https://go.microsoft.com/fwlink/?LinkId=221672#ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER。)

解决方法:设置该文件或网站目录的 LOCAL SERVICE 用户完全控制权限。

xoyozo 4 年前
2,285

按产品类型查询:费用 - 费用分析,右侧可筛选产品,可按月按天查询,自动合计

按实例查询:费用 - 费用账单,搜索实例ID,按月查询

另:已通过提交工单确认无法查询 OSS 按 Bucket 的账单及 CDN 按域名的账单。

xoyozo 5 年前
2,169

https://3gimg.qq.com/lightmap/v1/wxmarker/index.html?marker=coord:30.036977,121.154534;title:余姚市政府;addr:宁波市余姚市北兰江路1号

xoyozo 5 年前
4,555

命名空间“X.PagedList.Mvc.Core”中不存在类型或命名空间名“Common”(是否缺少程序集引用?)

X.PagedList.Mvc.Core.Common.PagedListRenderOptions

X.PagedList.Web.Common.PagedListRenderOptionsBase

改为

X.PagedList.Web.Common.PagedListRenderOptions

xoyozo 5 年前
3,095

undefined_swagger_json.png

错误原因可直接访问 /swagger/v1/swagger.json 找到。

xoyozo 5 年前
2,813