我正在尝试创建一个 Web 服务,其中从网页中选择的参数被发送到一个用 C# 编写的standalone.exe,它控制安装在服务器上的 CAD 包。CAD 软件包然后根据用户在前端网页上选择的参数生成图像。简而言之,我需要:
- 用户选择两个部分
- 选定的部分被发送到 C# .exe
- C# 运行 CAD 包,连接零件,返回两个零件的图像
- 用户看到图像
据我了解,我需要带有可见 WSDL 的 SOAP 实现。我通过教程运行并创建自己的 SOAP 和 WSDL 以及在我自己的 PHP 函数之间的本地和远程服务器上进行通信都没有问题。
现在我试图让一个 PHP 编写的 SOAP 被 C# 独立使用,这就是我迷路的地方。我对 SOAP 和 WSDL 比较陌生,但我了解它们的基础知识和功能。此外,我开始将 NUSOAP 用于我的 wsdl 生成。
是否有类似的代码包允许从允许 SOAP 连接的 c# 方法创建 WSDL 文件?
此外,我的客户端和网页将始终知道要发送的 WSDL 和所需参数。本质上,这只是 Web 和 CAD 包之间的网关。
这是 Wheezly McDizzle
<?xml version="1.0" encoding="UTF-8"?>
<definitions
xmlns:typens="urn:getBlockedIP"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
name="getBlockedIP"
targetNamespace="urn:getBlockedIP">
<types></types>
<message name="getBlockedIP">
<part name="idNumber" type="xsd:string"/>
</message>
<message name="getBlockedIPResponse">
<part name="ipAddress" type="xsd:string"/>
</message>
<portType name="blockedIPPort">
<operation name="getBlockedIP">
<input message="typens:getBlockedIP" />
<output message="typens:getBlockedIPResponse"/>
</operation>
</portType>
<binding name="blockedIPBinding" type="typens:blockedIPPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name = "getBlockedIP" >
<soap:operation soapAction = "urn:blockedIPAction" />
<input>
<soap:body namespace="urn:getBlockedIP" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body namespace="urn:getBlockedIP" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="getBlockedIPService">
<port name="blockedIPPort" binding="blockedIPBinding">
<soap:address location="http://mysite.com/xdata/blockedip_api.php"/>
</port>
</service>
</definitions>
正在测试的方法是使用单个参数的简单数组获取。它只是一个包含 25 个元素的数组,其中包含被阻止的 IP,用户在 1-25 之间选择一个数字,该方法会在数组中吐出与该位置相关的 IP。
我将 C# 中的方法模仿为命令提示符程序,使用Console.WriteLine
和Console.ReadLine()
. (这显然是不正确的,因为 C# 程序必须从 XML 文件中获取参数,而不是任何用户输入)
所以现在我被困住了——我的脑子里全是 WhizCheese Dulls 和 SOAP 和 XML。我对从这里去哪里感到困惑。我是前端和后端 Web 开发的专家,但在谈到 .NET 框架时仍然耳聋。
从本质上讲,我希望有人为我指明正确的方向,最终实现我在这个项目中的第一个既定目标。我做事的方式甚至可能吗?也许 SOAP 不是正确的路径?我也很困惑如何将参数发送到独立的 c# .exe 并让它使用它(如汉堡包...mmmmmmm)。
这是我在远程服务器上用 PHP 进行的肥皂实例化:
客户:
// WSDL location to be used with a WSDL instantiation of SOAP
$namespace = 'http://mysite.com/xdata/blockedip.wsdl';
// Parameters are easier sent as an array with associative keys
$params = array('arrayNum' => $number);
// include soap client (php.ini include_path set to installed PEAR location)
require_once 'SOAP/Client.php';
// create SOAP Client with an exposed WSDL location
$wsdl = new SOAP_WSDL($namespace);
//communicate with server, WSDL
$SoapClient = $wsdl->getProxy();
//call method with parameters
$ip = $SoapClient->call("getBlockedIP", $params);
服务器:
// include soap server and create server object
require_once 'SOAP/Server.php';
$soapServer = new SOAP_Server();
$server->_auto_translation = true;
// create class with desired method
$blockedip = new SoapTestClass();
// add class and namespace schema
$soapServer->addObjectMap($blockedip, 'http://schemas.xmlsoap.org/soap/envelope/');
// respond with raw post
$soapServer->service($GLOBALS['HTTP_RAW_POST_DATA']);
如果你还需要什么,我很乐意分享。感谢您抽出宝贵时间阅读本文并为您提供任何帮助!我非常感谢。
更新:
从我一直在阅读的内容来看,也许我必须打开元数据,但我不知道在哪里可以做到这一点?
更新:
我一直在使用 NUSOAP 从 php 方法生成我的 WSDL 文件并将它们连接到 VISUAL STUDIO 2010 C# 并且它们一直在工作。我现在坚持扭转这个过程。我需要 php 将参数发送到 C# 方法并让 .exe 返回一些东西。