将PEAR SOAP与WSDL连接到c#独立的.exe

本文关键字:独立 exe 连接 PEAR SOAP WSDL | 更新日期: 2023-09-27 18:09:36

我正在尝试创建一个Web服务,其中从网页中选择的参数被发送到用c#编写的standalone.exe,该文件控制安装在服务器上的CAD包。然后CAD包根据用户在前端网页上选择的参数生成图像。总之,我需要:

  1. 用户选择两个部件
  2. 被选中的部件被发送到c# .exe
  3. c#运行CAD包,连接零件,返回两个零件的图像
  4. 用户看到图像

据我所知,我需要带有可见WSDL的SOAP实现。我没有遇到任何问题,通过教程,创建自己的SOAP和WSDL,以及在本地和远程服务器上在自己的PHP函数之间进行通信。

现在我正试图得到一个PHP编写的SOAP由c#独立消费,这就是我迷路的地方。我对SOAP和WSDL比较陌生,但我了解它们的基础和功能。此外,我开始使用NUSOAP生成wsdl。

是否有类似的代码包允许从允许SOAP连接的c#方法创建WSDL文件?

而且,我的客户端和web页面将始终知道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.WriteLineConsole.ReadLine()作为命令提示程序。(这显然是不正确的,因为c#程序必须从XML文件中获取参数,而不是任何用户输入)

所以现在我被困住了——我的脑子里全是whiizcheese Dulls、SOAP和XML。我不知道该往哪里走。我是前端和后端Web开发的专家,但是当涉及到。net框架时,我仍然是新手。

本质上,我想要的是有人指出我在正确的方向,最终完成我在这个项目中的第一个既定目标。我做事的方式有可能吗?也许SOAP不是正确的路径?我也很困惑如何将参数发送到独立的c# .exe并让它消耗它(像汉堡包…mmmmmmm)。

下面是我在远程服务器上用PHP编写的soap实例:

客户:

// 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返回的东西。

将PEAR SOAP与WSDL连接到c#独立的.exe

由于您似乎正在尝试生成代理-您需要启用元数据发现,因此客户端程序知道如何构建调用(参数,方法,返回值)。您使用的是Apache、IIS还是其他工具?

什么是元数据交换通过IIS公开元数据通过Apache公开元数据

我更新了链接以启用Apache和IIS的元数据-可能会有更好的说明-我只涉足Apache。

SOAP没有任何"错误",它只是基于http协议的xml,它可以是一个契约优先(想想Web的IDL)方法来定义功能/服务,想想Web的IDL。php中似乎有很多工具可以实现这一点。nussoap就是这样一个更容易管理的库,scott Nichol深入介绍了如何设置它。从技术上讲,如果您有该方法的正确xml输入格式,您只需HTTP POST预期的输入(由WSDL定义),它就"正常工作"了。我发现SOAPUI是一个不可缺少的测试工具(无论如何我都没有参与)。

如果SOAP太令人心痛,你可以考虑采用RESTful方法REST框架Php它将使用更多的基于url的方法签名为您的外部接口,可能更容易实现您的目标。

您的问题并不完全清楚,但听起来您正在尝试让c#应用程序提供wsdl。php就可以使用暴露的合约了。

. net库的WCF(窗口通信框架)部分支持这一点。特别是SessionHost类将提供一个服务器,它可以承载SOAP服务并公开WSDL。

首先你需要在c#中定义你的契约。可以通过创建带有DataContract属性的接口来实现。

定义契约的接口示例。

[ServiceContract]
public interface MyContract
{
    [OperationContract]
    void MyOperation(string param1, int param2);
    [OperationContract]
    void MyOtherOperation(int param1, out int outputParam);
}
然后,您可以创建一个服务主机,它将创建一个SOAP服务器,并将传入的请求绑定到实现您的接口的类。它还将为您公开WSDL文件。

设置主机。

// create service host
// Note: ServiceHandler is a class you make that implements your service contract interfaces
ServiceHost host = host = new ServiceHost(typeof(ServiceHandler), new URI("127.0.0.1");
// enable metadata exchange (creates wsdl URL)
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
// start the host listening
host.Open()

希望这能帮助你开始。

我正在研究一个类似的问题。我研究了所有的排列方式,得出的结论是WDSL/XML不是最好的解决方案。

这是我想到的:AJAX。将网页请求推送到独立的c#代码。然后它会输出必要的图形(最好是PNG或JPEG格式)。然后将其放入HTML元素中进行显示。

我使用了一个连接到MySQL的c#程序,并让它定期检查表中的新条目