“Web服务”是一种软件系统,旨在通过万维网支持可互操作的机器对机器交互。
在 SOAP UI 中使用动态变量进行 Web 服务负载测试
我需要对 Web 服务进行负载测试,但需要更改每个请求的 SOAP 消息中的字段。 例如: 00001 我需要对 Web 服务进行负载测试,但需要更改每个请求的 SOAP 消息中的字段。 例如: <typ:storeNum>00001</typ:storeNum> <typ:transactionTotal>138</typ:transactionTotal> <typ:requestTime>2014-08-19T09:06:00</typ:requestTime> <typ:ecomTransactionId>920</typ:ecomTransactionId> 在负载测试中,soap 的主体按照 Web 性能测试中定义的场景中的设置提交。 如果我们需要动态设置每个请求的ecomTransactionId标签的字段值怎么办? (我在 MSDN 上读过一些文章,但都是指网站页面负载测试中查询字符串或会话的提取规则) http://msdn.microsoft.com/en-us/library/ff460245(v=vs.110).aspx 所描述的用于查询字符串的技术是您需要执行的操作的基础。 您需要将 ID 的值获取到上下文变量中,将其命名为 ecomTransactionId。完成此操作后,然后通过请求的属性面板编辑 SOAP 主体。预计会在面板的一小块区域中看到很长的字符串,因此可能需要大量滚动。更改属性中的 SOAP 主体以包含以下内容: <typ:ecomTransactionId>{{ecomTransactionId}}</typ:ecomTransactionId> MSDN 文章讨论了提取规则,因为这是查找所需值并将其保存到上下文参数中的常用方法。
开发Web通知时,Chrome通知API和推送通知API有什么区别。每一种应该何时使用以及它们有何不同?
我在 VPS 上有一个 Web api,我在 Netlify 的 _redirects 文件中指向它来处理 HTTP 请求。 一切正常,直到我重新加载根页面以外的任何页面,对于其他所有页面......
我使用maven wsimport 和Java 1.7 生成SOAP 客户端代码。 WSDL 是由客户提供的,我相信它是一个 .NET 支持的 SOAP 服务器。 致电服务后,我不断收到...
与此问题类似,我试图监视一组网站链接是否已启动并运行或没有响应。我在 Internet 上找到了相同的 PowerShell 脚本。 然而,而不是...
也许问这个看起来很傻,但我很困惑。我提到配置 Log4j 属性,但它似乎没有帮助。 我编写了一个简单的 Web 服务 HelloWorld。当我运行它时
Spring Boot中使用RestTemplate时的并发连接限制
我有一个使用 Spring boot 构建的测试微服务应用程序,我正在进行负载测试。这样做时,我似乎遇到了服务之间 RestClient 调用的阻塞问题。我没有...
我需要在我的 apache cxf 端点中返回未转义的 xml 字符串。下面我粘贴了我的代码部分、当前返回的 xml 字符串和所需的 xml 字符串: @WebService(
soap 1.2 消息的 http 标头中应包含什么内容类型?
我有一个问题,我的 xml-da 客户端使用 zsi 2.2.2 库生成看起来像肥皂 1.2 消息的消息,因为我可以看到这一行。 xmlns:soapenv="http://www.w3.org/2003/05/s...
我在.NET中有以下代码: // 获取 api/EmailValidationStaging/5 公共电子邮件验证 GetEmailValidation(长 ID) 这是一个 GET 方法,我可以这样调用它: $("#buttonFIND").c...
我的 wsdl 在地址位置放置了错误的域,如何修复? - - 我的 wsdl 在地址位置放置了错误的域,如何修复它? - <wsdl:service name="XWebService"> - <wsdl:port name="XServiceSoap" binding="tns:XWebServiceSoap"> <soap:address location="https://machine.wrongdomain.com.br/webservices/MapleStoryWebService.asmx" /> </wsdl:port> - <wsdl:port name="XWebServiceSoap12" binding="tns:XWebServiceSoap12"> <soap12:address location="https://machine.wrongdomain.com.br/webservices/XWebService.asmx" /> </wsdl:port> - <wsdl:port name="XWebServiceHttpGet" binding="tns:XWebServiceHttpGet"> <http:address location="https://machine.wrongdomain.com.br/webservices/MapleStoryWebService.asmx" /> </wsdl:port> - <wsdl:port name="XWebServiceHttpPost" binding="tns:XWebServiceHttpPost"> <http:address location="https://machine.wrongdomain.com.br/webservices/XWebService.asmx" /> </wsdl:port> </wsdl:service> 真正的域名就像https://machine.goodDomain.com.br 该地址取自用于访问 WSDL 的 URL。如果它与您想要实际提供服务的服务器不同,那么您可以通过创建一个扩展 SoapExtensionReflector 的类来更改它。以下是有关如何更改 URL 的示例文章: http://blogs.msdn.com/kaevans/archive/2005/11/16/493496.aspx 另一种选择是使用 IIS URL 重写模块 (http://www.iis.net/downloads/microsoft/url-rewrite) 首先 - 捕获 XWebService.asmx?WSDL 的输出并将其保存为 HTML 文件(例如 wsdl.htm)。 编辑此文件并将位置更改为备用地址 ...来自 thishost.domain.com: - <wsdl:port name="XWebServiceHttpPost" binding="tns:XWebServiceHttpPost"> <http:address location="http://thishost.domain.com/XWebService.asmx" /> </wsdl:port> ...至 thathost.domain.com: - <wsdl:port name="XWebServiceHttpPost" binding="tns:XWebServiceHttpPost"> <http:address location="http://thathost.domain.com/XWebService.asmx" /> </wsdl:port> 在 IIS 中 - 在网站/虚拟功能视图中找到 URL 重写图标。然后单击 添加规则 并选择 入站规则 - 空白规则。 使用规则 - 适当命名并设置将接收 WSDL 请求的 Web 服务 URL 的模式匹配。对于正则表达式: (.*)XWebservice.asmx 对于条件,将 {QUERY_STRING} 与 WSDL 以及 {REQUEST_METHOD} 与 GET 匹配。 对于Action - 将其设置为Rewrite(因此这对客户端来说是透明的)并选择我们之前保存的文件(wsdl.htm)。 这还会向 web.config 的 system.webServer 部分添加一个新的 rewrite 部分 <system.webServer> <rewrite> <rules> <rule name="WSDL Rewrite" stopProcessing="true"> <match url="(.*)XWebService.asmx" /> <conditions> <add input="{QUERY_STRING}" pattern="WSDL" /> <add input="{REQUEST_METHOD}" pattern="GET" /> </conditions> <action type="Rewrite" url="wsdl.htm" /> </rule> </rules> </rewrite> </system.webServer> 为什么不手动将 WSDL 文件中的地址编辑为应有的地址呢? 如果 WSDL 是由其他工具生成的,请告诉我们它是如何生成的,也许我们可以提供帮助。否则,没有法律禁止修改生成的文件以满足您的需要。如果原始用户环境的 WSDL 的问题只是 URL 错误,那么直接修改 URL 是完全合法的。 最初的反应是正确的。 WSDL 中的默认 URL 取决于用于访问 WSDL 的 URL。 我的团队过去处理更改服务 URL 的方式(例如,从开发环境过渡到测试或生产环境)是使用 wsdl.exe 为您的 Web 服务生成代码代理(代理实际上是通过以下方式创建的)也可以是 Web 或服务引用,但默认情况下不会显示在 Visual Studio 中),您可以编辑生成的代理类以从 (??) 任何您想要存储它的位置(数据库、配置文件等)读取服务的 URL。 解决方案很少,我会按照从简单到准确的顺序进行排序。 :) 不用担心 WSDL 中的 URL。 只需在客户端使用 Url 属性,就像在这种情况下: public class MyWebService : RemoteService { public MyWebService() : base() { Url = ConfigurationManager.AppSettings["MyServiceCustomUrl"]; } } 明显的缺点:很可能您将无法使用生成的 html(我的意思是为 Web 方法生成的表单)正确测试服务。 使用自定义wsdlHelpGenerator。 我没有测试这个解决方案,但乍一看,如果您基于原始的 DefaultWsdlHelpGenerator.aspx 创建自己的解决方案,它看起来很简单(您可以在 C:\Windows\Microsoft.NET\Framework* 文件夹中找到它) ,就我而言,它是 C:\Windows\Microsoft.NET\Framework 4.0.30319\Config\DefaultWsdlHelpGenerator.aspx)。 使用soapExtensionReflectorTypes。它将允许您使用 HttpSoap 协议地址执行任何操作。 创建一个处理程序(下面的示例将 http 更改为 https): public class HttpsReflector : SoapExtensionReflector { public override void ReflectMethod() { // nothing to override } public override void ReflectDescription() { ServiceDescription description = ReflectionContext.ServiceDescription; foreach (System.Web.Services.Description.Service service in description.Services) { foreach (Port port in service.Ports) { foreach (ServiceDescriptionFormatExtension extension in port.Extensions) { if (extension is SoapAddressBinding binding) { binding.Location = binding.Location.Replace("http://", "https://"); } } } } } } 在 web.config 中注册: <system.web> <webServices> <soapExtensionReflectorTypes> <!-- Required to replace http in addresses for HttpSoap protocol --> <add type="MyWebServices.WsdlFixHttp.HttpsReflector, MyWebServices"/> </soapExtensionReflectorTypes> </webServices> </system.web> 缺点:无法控制 HttpPost/HttpGet 协议。 实现IIS重写模块。它将允许您修改服务产生的任何输出。可以与#3一起使用。 创建2个类,流装饰器: public class StreamWatcher : Stream { private readonly Stream _base; private readonly MemoryStream _memoryStream = new MemoryStream(); public StreamWatcher(Stream stream) { _base = stream; } public override void Flush() { _base.Flush(); } public override int Read(byte[] buffer, int offset, int count) { return _base.Read(buffer, offset, count); } public override void Write(byte[] buffer, int offset, int count) { _memoryStream.Write(buffer, offset, count); _base.Write(buffer, offset, count); } public override string ToString() { return Encoding.UTF8.GetString(_memoryStream.ToArray()); } public override bool CanRead => _base.CanRead; public override bool CanSeek => _base.CanSeek; public override bool CanWrite => _base.CanWrite; public override long Seek(long offset, SeekOrigin origin) => _base.Seek(offset, origin); public override void SetLength(long value) => _base.SetLength(value); public override long Length => _base.Length; public override long Position { get => _base.Position; set => _base.Position = value; } } 和模块: public class WsdlFixHttpModule : IHttpModule { public void Init(HttpApplication context) { context.EndRequest += (s, e) => OnEndRequest(s, e); context.BeginRequest += (s, e) => OnBeginRequest(s, e); } private void OnBeginRequest(object sender, EventArgs e) { HttpContext httpContext = HttpContext.Current; if (httpContext.Request.Url.Query.Equals("?WSDL", StringComparison.InvariantCultureIgnoreCase) || IsAsmxGetRequest(httpContext)) { httpContext.Response.Filter = new StreamWatcher(httpContext.Response.Filter); } } private void OnEndRequest(object sender, EventArgs e) { HttpContext httpContext = HttpContext.Current; string oldValue = "", newValue = ""; bool replacementRequired = false; if (httpContext.Request.Url.Query.Equals("?WSDL", StringComparison.InvariantCultureIgnoreCase)) { oldValue = ":address location=\"http://"; newValue = ":address location=\"https://"; replacementRequired = true; } else if (IsAsmxGetRequest(httpContext)) { oldValue = "<form target=\"_blank\" action='http://"; newValue = "<form target=\"_blank\" action='https://"; replacementRequired = true; } if (replacementRequired) { string wsdl = httpContext.Response.Filter.ToString(); wsdl = wsdl.Replace(oldValue, newValue); httpContext.Response.Clear(); httpContext.Response.Write(wsdl); httpContext.Response.End(); } } private static bool IsAsmxGetRequest(HttpContext httpContext) { return httpContext.Response.ContentType == "text/html" && httpContext.Request.CurrentExecutionFilePathExtension.Equals(".asmx", StringComparison.InvariantCultureIgnoreCase) && httpContext.Request.HttpMethod == "GET"; } public void Dispose() { } } 然后在web.config中注册模块: <system.webServer xdt:Transform="Insert"> <modules> <!-- Required to replace http in addresses for HttpPost/HttpGet protocols --> <add name="WsdlFixHttpModule" type="MyWebServices.WsdlFixHttp.WsdlFixHttpModule, MyWebServices"/> </modules> </system.webServer> 请注意,上面的注册是集成模式,经典模式需要在里面注册system.web。 因此,在我们的遗留项目中,我使用了 3+4 方法,但如果我想再次这样做,我会尝试使用#2 方法。 :)
我正在尝试使用 Java 和 Apache 的 cxf 库进行 Web 服务调用,当然,如果可能的话,这应该通过摘要身份验证进行,如果服务器不支持,则基本作为后备...
我正在用 C# 编写一个 Web 服务。为此,我正在对 PVGIS 进行 API 调用。此每月太阳辐射值的 API 文档指定它使用基本文本数据或 CSV 数据进行响应,但 API
我正在尝试从返回数据集的 Web 服务创建 JSON 响应。如何循环访问数据表并将这些值放入客户端模型中?当我尝试循环数据表时...
目前我有Windows应用程序,它使用SqlConnection对象直接打开数据库连接(SQL Server位于远程),没有任何适当的安全措施。 现在我需要确保安全
有没有一种方法可以从我的家庭电脑或服务器上运行网站,而无需支付托管网站费用? 我尝试过通过付费托管服务来托管网站,但我想要一种更灵活的方式来运行...
有没有一种可能的方法可以从我的家庭电脑或服务器上运行网站而无需支付托管网站费用 我尝试过通过付费托管服务来托管网站,但我想要更灵活的 w...
我正在使用需要调用 WCF 服务的本机 C 客户端应用程序(不是使用 Visual Studio 构建的)。我正在创建 WCF 服务,因此我可以完全控制它。 大多数信息...
我创建了一个 Golang Web 应用程序并构建为可执行文件。当从其子目录中作为 ./main (main 是可执行文件的名称)执行时,可执行文件运行良好。 我正在尝试创建我...
网上有文档表明我应该能够通过 API 访问我的所有企业 google 评论、选择特定评论、回复评论以及删除所有通过 pl 的回复...