1

Web ページから選択されたパラメーターが、サーバーにインストールされた CAD パッケージを制御する C# で記述された standalone.exe に送信される Web サービスを作成しようとしています。次に、CAD パッケージは、フロントエンド Web ページでユーザーが選択したパラメータに基づいて画像を生成します。簡単に言うと、次のものが必要です。

  1. ユーザーが 2 つのパーツを選択
  2. 選択したパーツは C# .exe に送信されます
  3. C# は CAD パッケージを実行し、パーツを接続し、2 つのパーツの画像を返します
  4. ユーザーが画像を見る

私が理解していることから、目に見える WSDL を使用した SOAP 実装が必要です。チュートリアルを実行したり、独自の SOAP および WSDL を作成したり、ローカルおよびリモート サーバー上で独自の PHP 関数間で通信したりするのに問題はありませんでした。

現在、PHP で記述された SOAP を C# スタンドアロンで使用できるようにしようとしていますが、ここで迷子になっています。私は SOAP と WSDL に比較的慣れていませんが、それぞれの基本と機能を理解しています。さらに、wsdl の生成に NUSOAP を使い始めました。

SOAP 接続を可能にする c# メソッドから WSDL ファイルを作成できる同様のコード パッケージはありますか?

また、私のクライアントと Web ページは、送信される WSDL と必要なパラメーターを常に認識しています。基本的に、これは Web と CAD パッケージの間の単なるゲートウェイです。

こちらがウィーズリー・マクディズル

<?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>

これがテストしているメソッドは、単一のパラメーターを持つ単純な配列フェッチです。これは、ブロックされた IP を含む 25 要素の単なる配列であり、ユーザーが 1 ~ 25 の数字を選択すると、メソッドは配列内のその場所に関連する IP を吐き出します。

と を使用してコマンド プロンプト プログラムとして C# のメソッドを模倣しましConsole.WriteLineConsole.ReadLine()。(C# プログラムはユーザー入力ではなく XML ファイルからパラメーターを取得する必要があるため、これは明らかに正しくありません)

だから今、私は立ち往生しています.WhizCheese DullsとSOAPとXMLで頭がごちゃごちゃになっています. ここからどこへ行こうか迷っています。私はフロント エンドとバック エンドの Web 開発のプロですが、.NET フレームワークに関してはまだよくわかりません。

本質的に私が望むのは、このプロジェクトで最初に述べた目標を最終的に達成するために正しい方向に向けてくれる人です。私のやり方でも可能ですか?おそらくSOAPは正しいパスではありませんか? また、パラメーターをスタンドアロンの c# .exe に送信し、それを消費させる方法についても混乱しています (ハンバーガーのように... mmmmmm)。

リモート サーバー上の 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# に接続しており、それらは機能しています。私は今、プロセスを逆にすることに固執しています。パラメータを C# メソッドに送信し、その .exe に何かを返すようにするには、php が必要です。

4

4 に答える 4

0

あなたの質問が何であるかは完全には明らかではありませんが、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()

開始するのに役立つことを願っています。

于 2013-04-25T22:56:51.183 に答える
0

MySQL に接続し、定期的にテーブル内の新しいエントリをチェックする C# プログラムを使用しました。

于 2013-05-03T23:59:44.777 に答える