0

サービス参照に接続するコンソールアプリがあり、SOAP呼び出しをサービスに送信できます。これにより、自分が所有または制御していない別のプログラムの情報が更新されます。コンソールアプリは正常に動作します。ここに、私が何をしているのかを理解するためのコードを少し示します。

public static void PlaceOrders(wsCHRUtilsSoapClient client)
    {
        //identifying vars for patient/provider (not part of orders)
        string patientID = "1234";
        string csn = "123456789";
        string orderingUser = "98765";
        string authProvider = "98765";
        string departmentID = "123456";
        string projectKey = "eProj-CDS";
        string messages;

        //Create order samples
        Order oOne = CreateOrder("LAB", "CBCD", "1", "yay its friday", null, null, null, null, null, null, null, "4",
            "13", null, null, null, null, null, null, null, ", , , ", null, null, null, null, null, null, null, null, null);

        ArrayOfOrderOrder orders = new ArrayOfOrderOrder();
        orders.Add(oOne);

        client.PlaceOrders(patientID, csn, orderingUser, authProvider, departmentID, projectKey, orders, out messages);
    }

CreateOrderメソッドは、Orderオブジェクトを返すだけです。これは、基本的に文字列と文字列に基づく列挙型を含む栄光の構造体です(Intellisenseによって提案されているため、サービス参照から正しいことがわかります)。見事に動作し、ホストプログラムに投稿された情報をすぐに見ることができます。

これが私のWebアプリの同じ方法です。

public void PlaceOrders(object sender, EventArgs e)
    {
        wsCHRUtilsSoapClient client = new wsCHRUtilsSoapClient("wsCHRUtilsSoap");
        string messages;
        string orderPatID = this.orderPatID.Text;
        string orderCSN = this.orderCSN.Text;
        string orderOrderingUser = this.orderOrderingUser.Text;
        string orderAuthProvider = this.orderAuthProvider.Text;
        string orderDeptID = this.orderDeptID.Text;
        string orderProjKey = this.orderProjKey.Text;

        string strOrderType = this.orderType.Text;
        string orderCode = this.orderCode.Text;
        string strQuantity = this.quantity.Text;
        string comment = this.comment.Text;
        // ...Like 25 more strings that call their respective ASP textboxes...
        string rflPriority = this.rflPriority.Text;
        string processingInstructions = this.processingInstructions.Text;

        ArrayOfOrderOrder orders = new ArrayOfOrderOrder();
        Order order = CreateOrder(strOrderType, orderCode, strQuantity, comment, strFutureStanding, strStandingCount, standingInterval, 
            expirationDate, strAutoRelease, futureExpectedDate, strFutureApproximate, priority, orderClass, strPatientTaking, route, strDaw, 
            strDispenseQuantity, dispenseUnit, strRefill, sig, modifiers, rflFromProviderID, rflToProviderID, rflToFacility, rflToSpecialty, 
            rflType, rflReason, strRflNumVisits, rflPriority, processingInstructions);

        orders.Add(order);

        client.PlaceOrders(orderPatID, orderCSN, orderOrderingUser, orderAuthProvider, orderDeptID, orderProjKey, orders, out messages);
        client.Close();

Webアプリは散発的にプログラムを更新しているようです。動作しない場合とは対照的に、動作する場合のデバッグパターンや重要なものを理解できません。更新する場合、通常は瞬時ではありません。誰か助けてもらえますか?私はC#とASP.NETにかなり慣れていないので、Webアプリサービス参照を正しく設定する際の微妙な違いの1つを見逃した可能性があります(両方のアプリケーションで同じ方法で行ったと確信していますが)。

言及する価値があるかもしれない私が忘れた何か:コンソールアプリには、クライアントを作成してサービスを実行し、終了するだけのメインがあります。フォームへの入力が完了し、ASPボタンをクリックすると、Webアプリが実行され、関数が実行されます。

4

2 に答える 2

0

web.configに、サービス用のコンソールアプリのapp.configと同じ構成が含まれていることを確認する必要があります。

また、メソッド「PlaceOrders」をイベントハンドラー(ボタンクリックなど)にバインドしたことを確認する必要があります。

于 2011-10-07T14:59:15.500 に答える
0

結局のところ、これはサービス参照プロバイダー側​​の問題でした (最初はそうではないと主張していましたが)。皆様、ご応募ありがとうございました!

于 2011-10-20T19:37:20.223 に答える