-1

コールバック(非同期)、result..etcを使用してAPI(SOAP)を呼び出す必要があります。私が使用しなければならない方法:

public IAsyncResult BeginInsertIncident(
    string userName, string password, string MsgId, string ThirdPartyRef,
    string Type, string EmployeeId, string ShortDescription, string Details,
    string Category, string Service, string OwnerGrp, string OwnerRep,
    string SecondLevelGrp, string SecondLevelRep, string ThirdLevelGrp,
    string ThirdLevelRep, string Impact, string Urgency, string Priority,
    string Source, string Status, string State, string Solution,
    string ResolvedDate, string Cause, string Approved, AsyncCallback callback,
    object asyncState);

EndInsertIncident(IAsyncResult asyncResult, out string msg);

EndInsertIncidentは、チケットシステムでリクエストを閉じ、チケットが正しく実行された場合に結果を返します。

現状:

server3.ILTISAPI api = new servert3.ILTISAPI();
api.BeginInsertIncident(username, "", msg_id, "", "", windows_user,
    "BISS - Software Deployment", "", "", "NOT DETERMINED", "", "", "", "", "",
    "", "5 - BAU", "3 - BAU", "", "Interface", "", "", "", "", "", "", null,
    null);

では、Callback-Functionをどのように実装しますか?API「InsertIncidentCompleted」のステータスはまだnullではありません。EndInsertIncidentを呼び出さないためだと思います。

私はC#を初めて使用するので、助けが必要です。

4

1 に答える 1

0

AsyncCallbackvoidを返し、タイプが1つのパラメーターを受け取るデリゲートですIAsyncResult

したがって、このシグニチャを使用してメソッドを作成し、最後から2番目のパラメータとして渡します。

private void InsertIncidentCallback(IAsyncResult result)
{
    // do something and then:
    string message;
    api.EndInsertIncident(result, out message);
}

このように渡します:

api.BeginInsertIncident(username, "", msg_id, "", "", windows_user,
    "BISS - Software Deployment", "", "", "NOT DETERMINED", "", "", "", "", "",
    "", "5 - BAU", "3 - BAU", "", "Interface", "", "", "", "", "", "",
    InsertIncidentCallback, null);

クラスのメンバー変数を作成できずapi、それをコールバックに渡したい場合は、次のようにする必要があります。

private void InsertIncidentCallback(server3.ILTISAPI api, IAsyncResult result)
{
    // do something and then:
    string message;
    api.EndInsertIncident(result, out message);
}

これをコールバックとして渡すことができるようにするには、デリゲートを使用する必要があります。

api.BeginInsertIncident(..., r => InsertIncidentCallback(api, r), null);
于 2013-02-26T09:50:47.900 に答える