背景:
我正在创建一个webservices站点,它将提供许多类型的简单服务,而不仅仅是SOAP和其他协议.目标是使转换,RSS解析,垃圾邮件检查和许多其他类型的工作变得容易.该网站主要针对初学者开发人员.
我的问题:
我从来没有开发过任何C#或.NET.很多年前我确实破解了一些VB6,但就是这样.现在我需要一些在C#中通过SOAP进行RPC调用的例子.我试图搜索网络和Stack Overflow,找到这个,但没有找到很多资源,我不知道如何排序资源(哪些是旧的?哪些是不正确的?等等).
我创建了一个简单的示例服务,在PHP中调用如下:
<?php
$client = new SoapClient('http://webservi.se/year'); //URL to the WSDL
echo $client->getCurrentYear(); //This method returns an integer, called "year"
?>
Run Code Online (Sandbox Code Playgroud)
我现在想在C#中尽可能简单地调用这个方法.所有参考和例子都非常受欢迎.我该从哪里开始?哪些课程/模块/我可以使用哪些?
如果有更好的通信框架(后端意味着可扩展),解决方案根本不需要涉及SOAP,但请注意,服务器端是在Unix上用PHP实现的,因此Microsoft的专有解决方案是不可能的.服务器端.
请注意,我需要这样,所以我可以为J. Random Web Developer编写文档,以便遵循(即使它们在共享的虚拟主机上).因此,我认为最好的方法应该是仅在代码中执行此操作,但即使是其他方式,这当然也是受欢迎的.
我正在尝试使用HttpClient类发送SOAP消息:
使用REST这样做很容易(代码来自这里):
using System;
using System.Net.Http;
using System.Json;
namespace ConsoleApplication39
{
class Program
{
static void Main(string[] args)
{
HttpClient proxy = new HttpClient();
proxy.GetAsync("http://localhost:14892/api/Bloggers").ContinueWith((r) =>
{
HttpResponseMessage response = r.Result;
response.Content.ReadAsAsync<JsonArray>().ContinueWith(
(a)=>
{
foreach(var w in a.Result)
{
Console.WriteLine(w.ValueOrDefault("Name").ToString());
Console.WriteLine(w.ValueOrDefault("Intrest").ToString());
}
});
});
Console.ReadKey(true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想用SOAP做类似的事情.
我有主机(http://opensearch.addi.dk/2.2/)和POST消息的SOAP消息:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://oss.dbc.dk/ns/opensearch">
<SOAP-ENV:Body>
<ns1:searchRequest>
<ns1:query>dc.title=zorro AND dc.type=bog</ns1:query>
<ns1:agency>100200</ns1:agency>
<ns1:profile>test</ns1:profile>
<ns1:start>1</ns1:start>
<ns1:stepValue>10</ns1:stepValue>
</ns1:searchRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
......但是怎么发送呢?
我承认这是我用过的第一个SOAP Web服务,所以我可能不知道我在做什么,但最简单的形式可能是:
HttpClient hc = new HttpClient(); …Run Code Online (Sandbox Code Playgroud) 我在C#中编写Web服务客户端,不想创建和序列化/反序列化对象,而是发送和接收原始XML.
这可能在C#中吗?
使用microsoft net wsdl.exe工具将WSDL转换为C#类,但该工具无法转换WSDL文件的以下部分.任何指向正确方向的人都非常感激.
WSDL输入
<complexType name="Merchant">
<sequence>
<element name="iId" type="xsd:int" />
<element name="sName" type="xsd:string" />
<element name="sDescription" type="xsd:string" minOccurs="0" />
<element name="aSectors" type="api:ArrayOfMerchantSectors" minOccurs="0" />
</sequence>
</complexType>
<complexType name="ArrayOfMerchant">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="api:Merchant[]" />
</restriction>
</complexContent>
</complexType>
<complexType name="MerchantSector">
<sequence>
<element name="iSectorId" type="xsd:int" />
<element name="sSectorName" type="xsd:string" />
</sequence>
</complexType>
<complexType name="ArrayOfMerchantSectors">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="api:MerchantSector[]" />
</restriction>
</complexContent>
</complexType>
Run Code Online (Sandbox Code Playgroud)
C#输出?????
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://api.someexampledomain.com/")]
public partial class ArrayOfMerchant : …Run Code Online (Sandbox Code Playgroud) 重要免责声明.这个问题不是关于为WSDL生成代理.它不是在VS Code中创建引用.
我正在使用Visual Studio Code(最新更新,11月16日v1.8),我需要创建一个使用WSDL和XSD文件描述的外部Web服务的调用.我想使用前面提到的编辑器来做到这一点,并且最好不必编写所有代理并包围自己.
这可能还是我在这个上运气不好?
如果在VS Code中不可行,最简单的选择是什么?我们是在谈论使用VS15生成类和调用并复制文件还是有一个我不熟悉的简洁解决方法?
c# web-services visual-studio visual-studio-code asp.net-core
我有一些数据需要以SOAP格式发送到服务器。该服务器将立即确认它已收到消息。几个小时后,我(可能从另一台服务器)收到了一条SOAP消息,其中包含有关已处理数据的信息。
我读了Stackoverflow:如何发送SOAP请求和接收响应。但是,答案是8岁。尽管它们可能仍然有效,但是可能存在更新的技术。
看起来确实如此:Microsoft具有System.Web.Services.Protocols,并且具有SoapMessage,SoapClientMessage,SoapServerMessage等类。
查看这些类,我会发现很多类似SOAP的类(标头,扩展名,客户端消息,服务器消息...通常,所提供的示例向我指示了这些类如何协同工作以及如何使用它们。只能找到有关如何处理已经存在的SOAP消息的示例。
给定一些需要发送的数据,如何将这些数据包装到这些SOAP类之一中并发送此消息?
这些类是否为此目的?还是我应该坚持2011年的方法,您可以通过上面提到的Stackoverflow问题所建议的方式自己将自己的XML数据格式化为SOAP格式来创建SOAP Web请求?
非常抱歉,通常我会写一些我尝试过的东西。las,我看不到提供的SoapMessage类之间的关系。我不知道如何使用它们。
评论后加法
我正在使用Windows Server / Visual Studio(最新版本)/。NET(最新版本)/ C#(最新版本)。
与服务器的通信是相互认证的。我需要用于与服务器通信的证书为PEM(CER / CRT)格式。私钥是RSA。该证书由适当的CA颁发,服务器还将使用适当的CA使用的证书。因此,我不需要创建新的证书(实际上,它不会被接受)。如果需要,我愿意使用OpenSsl之类的程序转换证书。
我尝试使用Apache TomCat进行通信,但是我觉得对于每天发送一条SOAP消息并每天等待一个答案的任务来说,这实在太多了。
也许因为Java对我来说是一种全新的技术,所以我很难看到接收到的消息的内容。回到C#和.NET。
我打算创建一个供控制台应用程序使用的DLL。该函数将流中的某些数据作为输入。它将创建肥皂消息,发送该消息,等待正确接收到该消息的答复,然后等待(可能几个小时)以获取一条包含处理后数据结果的新肥皂消息。为了使正确的报告和取消成为可能,我想最好使用async-await来做到这一点。
如果无法在一个应用程序中完成发送订单和等待结果的操作,我愿意创建一个Windows服务来监听输入,但我希望保持简单。
(虚拟)计算机将仅用于此任务,因此没有其他人需要侦听端口443。每天将发送一封定单消息,每天发送一条结果消息。
SAP .NET 连接器与 .NET Core 框架不兼容。使用 .NET Core 时,还有其他方法可以从 SAP 检索数据吗?
我已经在 nuget 包管理器中搜索了替代方案,但没有找到。我可以使用任何解决方法吗?我非常希望从 .NET Core 的性能中受益,但我还需要能够连接到 SAP。
如何将xml数据转换为JSON格式.我也希望通过SOAP发送它.
你能提供一些例子吗?
c# ×7
soap ×5
soap-client ×2
web-services ×2
.net-core ×1
asp.net ×1
asp.net-core ×1
httpclient ×1
json ×1
sap ×1
wcf ×1
wsdl ×1