【问题标题】:.bat Error: 'http:' is not recognized as an internal or external command, operable program or batch file.bat 错误:'http:' 不是内部或外部命令、可运行程序或批处理文件
【发布时间】:2016-02-16 20:56:21
【问题描述】:

我在尝试使用 Visual Studio 2012/2013 从现有 ASP 网站设置(更不用说运行)单元测试时遇到了另一个死胡同,但我认为这个问题值得自己提出问题,尽管我看到过类似的问题,但过去 5 小时内我尝试的所有结果都在 0 和 Null 之间(不是字面意思,如果我能得到这样的输出,那将很有帮助),

我的批处理文件的内容是按照 sitepoint.com 的“通过 5 个简单步骤创建和使用 .NET Web 服务”的说明:

wsdl /l:CS /n:WService /out:bin/wsdlWalkthrough.cs
http://localhost/webserv.asmx?wsdl

由于我试图按照一篇已有十多年历史的文章的步骤进行操作,因此语法和约定可能很容易发生变化。但是,嘿,它能够指导我制作一个有效的 .asmx 页面,所以我尝试坚持下去。无论如何,当我在 VS2012 的开发人员命令提示符上运行 makeWS.bat 时,我得到了错误:

'http:' 不是内部或外部命令,可操作 程序或批处理文件。

在尝试解决问题时,我的 makeWS.bat 页面当前看起来像:

wsdl /l:CS /n:WService /out:bin/wsdlWalkthrough.cs
http://localhost:20141/webserv.asmx?wsdl

另外,.asmx 文件如下所示:

<%@ WebService Language="C#" Class="GetInfo" %> 

using System; 
using System.Data; 
using System.Data.SqlClient;
using System.Web.Services; 

[WebService(Description="My Suppliers List Web Service")] 

public class GetInfo : WebService  
{
  [WebMethod(Description="My WebService",BufferResponse=true)] 

  public DataSet ShowSuppliers (string str)  
  { 

    SqlConnection dbConnection = new SqlConnection("server=(local);uid=sa;pwd=;database=Northwind;");  

    SqlDataAdapter objCommand = new SqlDataAdapter("select ContactName, CompanyName, City, Phone from Suppliers  where Country = '" + str + "' order by ContactName asc", dbConnection); 

    DataSet DS = new DataSet();
    objCommand.Fill(DS);
    return DS;
    dbConnection.Close();
    dbConnection = null; 

  } 
}

当我从文件资源管理器中运行 Firefox 中的 ASMX 页面时,我收到了错误:

XML 解析错误:格式不正确

但是,从 VS2013 运行 .asmx 页面可以让一切顺利进行。我想也许 localhost 端口可能起到了作用,所以我尝试调整我的批处理文件:

wsdl /l:CS /n:WService /out:bin/wsdlWalkthrough.cs
http://localhost:20141/webserv.asmx?wsdl

我尝试关闭 自动运行,我已将 http 地址添加为 系统变量,但没有任何效果。有没有人能够识别我的问题,因为当我的 VS2012 开发人员命令提示符 说它无法识别 http: 时,我真的很怀疑。 超文本传输​​协议现在不是在架构级别集成了吗?

更新

'http:' 不是内部或外部命令、可运行程序或批处理文件。

是因为 url 与 wsdl(.exe) 命令(它应该是它的参数),并且批处理包含(这是 一系列命令的简化视图),每个命令都在不同的行上。 为了克服这个问题,将 2 行合并为 1:

wsdl /l:CS /n:WService /out:bin/wsdlWalkthrough.cs http://localhost:20141/webserv.asmx?wsdl

或通过 ^(caret) 转义 eoln (\r\n) 字符:

wsdl /l:CS /n:WService /out:bin/wsdlWalkthrough.cs ^
http://localhost:20141/webserv.asmx?wsdl

如果一切正常,你应该有你的 bin/wsdlWalkthrough.cs 文件生成。

CristiFati 的指示让我克服了最初的障碍。现在新的错误是:

错误:有一个错误处理 'http://localhost/webserv.asmx?wsdl'。 - 下载“http://localhost/webserv.asmx?wsdl”时出错。 - 请求失败,HTTP 状态为 404:未找到。

这似乎是我自己可以找到答案的事情,但仍然非常感谢您提供进一步的帮助。

【问题讨论】:

  • 我不是 WSDL 专家,但 .asmx 内容看起来还不错。请注意,在您最新的错误消息中(不确定这是否是粘贴消息时的拼写错误)http://localhost 之间有一个额外的空格。该错误来自批处理文件吗?您可以尝试使用浏览器中抛出的相同链接:XML Parsing Error: not well-formed?另外,如果您在浏览器中遇到错误,您可以查看页面源吗?

标签: batch-file wsdl asmx command-prompt


【解决方案1】:

'http:' 不是内部或外部命令、可运行程序或批处理文件。

是因为 url 与 wsdl(.exe) 命令(应该是它的参数)在不同的行上,并且批处理由一系列命令组成(这是一个简化的视图),每个命令都在不同的行上。为了克服这个问题,将 2 行合并为 1:

wsdl /l:CS /n:WService /out:bin/wsdlWalkthrough.cs http://localhost:20141/webserv.asmx?wsdl

或通过 ^(caret) 转义 eoln (\r\n) 字符:

wsdl /l:CS /n:WService /out:bin/wsdlWalkthrough.cs ^
http://localhost:20141/webserv.asmx?wsdl

如果一切正常,您应该生成 bin/wsdlWalkthrough.cs 文件。

【讨论】:

  • 多么尴尬,新行角色再次造成严重破坏。如果我有先决条件的声望点,我会给你一个赞成票。这解决了第一个问题。
  • 这里是MSDN 链接,说明如何从浏览器访问网络服务:
  • 我不确定 WSDL 是如何部署的,可能通过以下方式访问:http://localhost:20141/webserv.asmx/ShowSuppliers?str=SomeCountryName
  • 您对您的帮助表示最诚挚的感谢,如果可以的话,我会给您一个有用的旗帜来支持您的投票。可悲的是,我所能做的就是分享我的一些 cookie:__cfduid __hstc __qca acct hsfirstvisit hubspotutk
  • 不客气。不用担心 :)。不过要提一下:不要在问题中包含答案(即使是部分答案),它会使其更长(更难阅读)。
猜你喜欢
  • 2011-09-06
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2018-08-25
  • 2014-06-01
  • 2022-01-06
相关资源
最近更新 更多