Tag: soap

肥皂错误:“服务器无法处理请求”“对象引用未设置为对象的实例”

当我在本地IIS中向我的服务发送SOAP请求时,一切正常。 当我将SOAP请求发送到在另一台主机上的IIS上运行的同一服务时,一切正常。 但是当另一个程序员向我的服务发送SOAP请求时,他通常会得到正确的响应,除了返回的服务中的一个方法: soap:Server Server was unable to process request. —> Object reference not set to an instance of an object. 我需要理解为什么他会收到这个错误。 他的SOAP请求与SOAP Request完全相同,但我的工作却没有。

.NET工具为代理类生成包装器

使用SvcUtil我为SOAP WebService生成了代理。 这个Web服务有许多复杂的类型,每年都可以更改。 有没有一个工具可以用来为所有类生成包装器。 在包装器类中使用组合我将调用代理类。

如何从C#中的wsdl SOAP请求信封转到

我需要在Web服务上调用操作,但我不知道请求信封的外观(服务在运行时由用户附加)。 一般来说,我想基于wsdl链接以编程方式生成soap信封。 使用给定的链接获取操作列表以及特定结果的结果: 任何人都知道如何做到这一点?

不显示SOAP服务的数据

我有一个涉及C#控制台客户端和Web服务的有趣问题。 我的怀疑是某个地方有一个名称空间错误或一些简单的事情,但八个小时茫然地盯着屏幕尚未透露它们,所以我想我会再尝试一些眼睛。 WSDL 请求XSD 响应XSD(缩短,因为它很大) 使用此WSDL,我在soapUI中获得以下请求和响应:SoapUI请求: 12345 SoapUI响应(为了便于阅读而缩短): 1 1 12345 PLU My dummy product 我已经尝试用svcutil生成代理并在C#中使用服务引用无济于事。 SoapUI按预期工作并返回数据,而C#获取一个空列表。 C#测试代码 class Program { static void Main(string[] args) { BOMPortTypeClient _client = new BOMPortTypeClient(); var state = _client.State; BOMRequestItem _reqItem = new BOMRequestItem { ProductNumber = “12345” }; IList _list = _client.BOM(_reqItem); } } 编辑:添加了来自.Net的请求/响应的Fiddler日志 .Net请求 12345 .Net响应 […]

即使我明确指定1.1,WCF自定义消息编码器也使用Soap1.2

我有一个自定义编码器连接到一个在水下使用TextMessageEncoding元素的customBinding。 我明确指出SOAP 1.1应该与WS Addressing 1.0一起使用。 正如我所说,我的自定义编码器在水下使用文本消息编码器; 编码器只是添加了一些调用我的服务的服务实现的标头。 当我在SOAPUI中添加生成的WSDL(使用SOAP 1.2,即使我在WS Addressing 1.0中指定了SOAP 1.1)并发送请求时,内容类型也不同,从而导致错误。 我认为这是因为WHILE生成WSDL,它使用Soap 1.2,但WHILE发送请求它尝试使用SOAP 1.1,即使使用SOAP 1.2发送消息。 有一些相关问题: 当我第一次使用 ,将WSDL添加到SOAPUI,然后将编码更改为我的自定义编码器并发送请求(这导致WSDL为Soap 1.1所以我想也许这将是一个非常hacky的解决方法),我得到以下错误: HTTP/1.1 415 Cannot process the message because the content type ‘text/xml;charset=UTF-8’ was not the expected type ‘text/xml; charset=utf-8’. 这里的问题是UTF-8是大写的,并且后面有空格; 。 我觉得这很奇怪,应该不是问题! 在Visual Studio中,自定义编码器有一条波浪线,表示The element ‘binding’ has invalid child element ‘MissingWSAddressingHeadersTextEncoding’. List of possible elements expected: […]

在C#中解析和查询SOAP

我试图解析一个严重命名的SOAP消息(源也可以在这里找到): 0a00f556419041c08d8479fbaad02a3c 5.3.0 1000 Success B08CF7B847DAD89C752334BDEBB69B5B 仅针对上下文,这是MM7提交消息的响应。 如何获得以下值: TransactionID,StatusCode,StatusText,MessageID 我试过Linq-Xml但是当查询包含像“soapenv:Body”这样的值时没有运气。

使用C#将签名的SOAP消息创建为字符串

我需要调用Web服务,我必须使用C#发送下面的肥皂请求。 必须签署SoapBody和TimeStamp。 MIIFsDCCBawwggSUoAMCAQICBgCaWhnEajANBgkqhkiG9w0BAQsFADBcMQswCQYDVQQGEwJUUjFNMEsGA1UEAwxETWFsaSBNw7xow7xyIEVsZWt0cm9uaWsgU2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgLSBTw7xyw7xtIDEwHhcNMT IZVrIpPCxiPcvyVOVv/d4nRPZWM= fltghgDztDtuVQX7y4t0ZJxAnxE= IOVXxBTp053aNJMbQj+VTiBblZ63peyJ1vWazKmEWNxN7RaeFfKELoxede8xQEqzSaB/u8exC7LLGYiEdChboVCf9liLMN4MmNj5JR6gfDrsL3azThf5hxLQ+WIE20PRoU6ozpp20zC1IaO3IU4ZaRLw 2014-12-08T21:26:36.191Z 2014-12-08T21:36:36.191Z 1234567 我创建了这个soap请求并通过使用带有私钥的证书的WCF客户端CustomBinding和.pfx文件获得了良好的响应。 有关签署soap消息的大多数示例都使用证书存储或pfx文件中的证书。 但在我的方案中,用户的证书(带有私钥)存储在智能卡上,无法导出证书私钥。 所以在这种情况下我不能使用WCF CustomBinding或者我不能使用SignedXml类来签署SOAP消息,因为当我尝试以编程方式获取证书时,则缺少私钥。 (此外,我通过使用NCryptoki – PKCS包装器获得了私钥,但是此私钥类型与RSA不同,我无法为WCF客户端或SignedXmlClass私钥设置。) 因此,我尝试将此SOAP消息创建为字符串,并使用智能卡手动创建DigestValues,BinarySecurityToken和SignatureValue。 我可以将BinarySecurityToken值计算为: var certificate = GetX5092Certificate(); // X5092 certificate on smart card without private key string binarySecToken= Convert.ToBase64String(certificate.RawData); 我也有一些代码来计算摘要值: byte[] dataToHashTS = Encoding.UTF8.GetBytes(TimeStampReference.OuterXml); XmlDsigExcC14NTransform transformDataTS = new XmlDsigExcC14NTransform(“wsse soap web”); transformDataTS.LoadInput(new MemoryStream(dataToHashTS)); byte[] bDigestDataTS = transformDataTS.GetDigestedOutput(SHA1Managed.Create()); string sDigestDataTS […]

如何在Visual Studio 2010中使用C#创建简单的SOAP服务器?

我试图按照这里的说明进行操作,但随着它们的进一步发展,它们似乎很快变得非常具体。 我只想要一个用于创建非共享点SOAP启动项目的一般教程,而Google目前不是我的朋友。 似乎上述一些步骤适用。 到目前为止我有: 使用文件 – >新网站创建的解决方案’WebSite1’。 C#中的“ClassLibrary1”项目,System.Web.Services添加到References。 classlibrary1中的key02.snk(强名称密钥文件)文件节点。 还没有实现任何SOAP服务器方法的代码。 不知道如何向上面添加代码,然后构建和运行,并有一个soap hello-world类型方法。 我想实现一个至少需要一个参数的简单HelloWorld方法。 可以使用如下URL来查询生成的服务的WSDL: http[s]://localhost/myfirstsoapserver/helloWorldMethod1.asmx?WSDL 如果我的猜测是正确的,那么任何可以导入W​​SDL的工具都可以使用上面的Url。 我的目标是快速原型设计和模拟我需要处理的各种其他SOAP接口,我希望C#+ visualStudio2010 + IIS是一种相当简单的方法。

如何使用Moq模拟SoapException以进行unit testingerror handling

我inheritance了一个调用SOAP Web服务的小型控制台应用程序。 这是一个嵌套的try-catches的悲剧性混乱,它以各种方式记录exception,并且我想围绕抛出SoapException时它的行为进行一些测试。 问题:当我无法模拟接口并且无法使属性或方法“虚拟”时,如何使用Moq模拟像SoapException这样的类? 再解释一下: 要测试此error handling,我需要控制SoapException对象的Actor属性,以及Detail属性以validationerror handling。 我的unit testing代码的片段: [TestMethod] public void MyTestMethod() { Mock soapMock = new Mock(MockBehavior.Strict); soapMock.SetupGet(ex => ex.Actor).Returns(“Test Actor”); 由于我正在模拟一个具体的类,并且Actor属性未标记为“Virtual”,因此在测试运行期间执行SetupGet(…)行时Moq会抛出此exception: System.NotSupportedException:非虚拟(在VB中可覆盖)成员上的无效设置:ex => ex.Actor 经过一些阅读,理想的答案是模拟一个界面,在这种情况下我无法做到。 由于这是.NET框架中的一个类,我也无法将Actor属性神奇地标记为虚拟。 我如何模拟SoapException,或者我可以通过不同的方式validationerror handling? 顺便说一下,我首先想要创建一个实际的SoapException,其中包含一些XML节点,但我很快就陷入了以编程方式创建XML文档树的漏洞。 我可以做到,但它需要更多的测试设置代码,如果可能的话,我想避免使用。

获取所请求客户端的IP地址(Soap消息)

我建立了一个ASMX服务,并在代码中处理来自ELMAH的错误日志。 我在数据库中添加了所有字段,并添加了一些,一个是所请求客户端的IP地址… 但我不能(请阅读,不知道如何)得到… 我已经习惯了 string ipAddress = HttpContext.Current.Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]; if (ipAddress == “”) ipAddress = HttpContext.Current.Request.ServerVariables[“REMOTE_ADDR”]; 但是当然它不适用,因为它不是HTML请求而是SOAP请求 在ALL_HTTP标题中,我得到了所有这些信息: HTTP_CONNECTION:Keep-Alive HTTP_CONTENT_LENGTH:440331 HTTP_CONTENT_TYPE:text/xml; charset=utf-8 HTTP_EXPECT:100-continue HTTP_HOST:www.mydomainname.com HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3074) HTTP_VSDEBUGGERCAUSALITYDATA:uIDPowJ7s0UYlmhEqcDjxYQT/TQAAAAADlaOOkJ5DUizA7gKLg3YEPur8pFWlaVFmpinSAOBTuIACQAA HTTP_SOAPACTION:”http://www. mydomainname.com/webservices/ErrorReportService/ReportErrors” 我在哪里以及如何获得请求的IP? 请注意,我没有使用任何类型的身份validation(还)… 🙂