次の方法で共有


NotificationTransport.SendNotification メソッド

NotificationTransport

このメソッドを呼び出すと、MsnNotification オブジェクトを Microsoft® .NET Alerts ルーティング エンジンに送信することができます。

定義

Sub SendNotification( _
    WaitForCompletion As Long, _
    wszUsername As String, _
    wszPassword As String, _
    Notification As MsnNotification, _
    Token As Long _
)

パラメータ

  • WaitForCompletion
    True に設定する必要があります。Microsoft Visual Basic® では、非同期の操作はサポートされていません。
  • wszUsername
    .NET Alerts プロバイダの名前が含まれる文字列です。この名前は、登録時にプロバイダによって決められます。.NET Alerts プロバイダ キーのインストール ユーティリティを実行した場合は、このパラメータを NULL 文字列にする必要があります。
  • wszPassword
    .NET Alerts プロバイダの秘密のパスワードが含まれる文字列です。このパスワードは、登録時に Microsoft によって提供されます。.NET Alerts プロバイダ キーのインストール ユーティリティを実行した場合は、このパラメータを NULL 文字列にする必要があります。
  • Notification
    正しく初期化された、送信する MsnNotification オブジェクトです。
  • Token
    現在の送信に関連付けられるトークンの値が含まれる整数です。Token に指定した値は、どのメッセージ送信が完了したかを識別する OnCompletion イベントに渡されます。

エラー コード

0x80000002 内部で使用するためのメモリを割り当てているときに問題が発生しました。可能であれば、一部のシステム リソースを解放してから操作をやり直してください。
0x80000003 wszUsername または wszPassword のいずれか (両方ではない) が NULL 文字列でした。wszUsernamewszPassword の両方を NULL 文字列に設定する (レジストリに格納されている credential を使用している場合) か、wszUsernamewszPassword の両方に NULL 文字列以外の値を指定します。
0x80004005 メソッドが同期モードで呼び出され、エラー (200 ~ 299 グループに含まれないもの) を示す HTTP 状態コードが生成されました。
0x80072AF9 配信先 URL で指定したホスト名を解決する際に問題が発生しました。配信先 URL が正しいことを確認し、通知を送信しているサーバーのネットワーク接続を調べてから、操作をやり直してください。
0x81fd0001 Microsoft Windows® レジストリから .NET Alerts プロバイダの credential を取り出す際に問題が発生しました。InstallSDKKey.exe ユーティリティをもう一度実行してください。 それでも問題が解決しない場合は、Microsoft 製品サポート サービスに問い合わせてください。詳細については、「サポートを利用する」を参照してください。
0x81fd0003 Notification で指定した通知を処理しているときに、.NET Alerts クライアント ライブラリに内部エラーが発生しました。エラーを返したサーバーのリソースが不足していないことを確認し、通知のプロパティが適正な値に設定されていることを確かめてから、操作をやり直してください。
0x81fd0004 メモリまたはリソースの問題が原因で、HTTP トランスポートにエラーが発生しました。可能であれば、一部のシステム リソースを解放してから操作をやり直してください。
0x81fd0190 Notification で指定した通知オブジェクトに対して生成された通知パケットが長すぎる (2048 バイトを超えている) か、通知パケットを解析する際に .NET Alerts ルーティング エンジンに問題が発生しました。通知のプロパティが適正な値に設定されていることを確認してから、操作をやり直してください。AddToPID メソッドを使用して通知に複数の PUID を指定している場合は、1 つの通知に含まれる PUID の数を減らすようにしてください。
0x81fd0191 .NET Alerts プロバイダの認証に失敗しました。 このエラーは、wszUsername で指定した .NET Alerts プロバイダ名または wszPassword で指定したパスワードが正しくない場合、あるいはレジストリに格納されている credential が正しくない場合に発生します。ユーザー名とパスワードを確認するか、InstallSDKKey.exe ユーティリティをもう一度実行してから、操作をやり直してください。 それでも問題が解決しない場合は、Microsoft 製品サポート サービスに問い合わせてください。詳細については、「サポートを利用する」を参照してください。
0x81fd01f4 一般的な配信エラーが発生しました。1 つまたは複数の通知プロパティが正しくない場合、配信先 URL が正しくない場合、またはネットワークに一時的な問題が発生した場合に、このエラーが返されることがあります。通知のプロパティと配信先 URL を確認してから、操作をやり直してください。
0x81fd01f5 .NET Alerts ルーティング エンジンに重い負荷がかかり、ビジー状態になっているため、通知を処理できませんでした。操作をやり直してください。
0x81fd0257 通知の SiteID プロパティで指定した Site ID が、wszUsername パラメータで指定した .NET Alerts プロバイダ名に関連付けられている Site ID と一致しませんでした。正しいプロバイダ名と Site ID を使用していることを確認してから、操作をやり直してください。
0x81fd0258 .NET Alerts ルーティング エンジンの内部エラーのため、この通知を配信できませんでした。操作をやり直してください。 それでも問題が解決しない場合は、Microsoft 製品サポート サービスに問い合わせてください。詳細については、「サポートを利用する」を参照してください。
0x81fd02bc 指定された単位時間内に送信された通知の数が、Microsoft .NET Services 契約で指定された制限を超えました。通知の送信速度を低くして、操作をやり直してください。詳細については、NET Services 契約を参照してください。

ここに示すリターン コードの他に、.NET Alerts クライアント ライブラリのメソッドによって、標準の Microsoft Win32® または Component Object Model (COM) の結果コードがシステムの下位層から返される場合があります。Microsoft Visual Studio® のエラー照合ツールを使用すると、これらの標準結果コードに関連付けられたヘルプ テキストを表示できます。

次の例は、SendNotification メソッドの使い方を示しています。

Dim RetryCount as Integer
RetryCount = 0

' Create and initialize the transport object.
Dim Transport As Object
Set Transport = CreateObject("MSNOTIFY.NotificationTransport")

' Initialize the transport object to use an appropriate transport URL.
' This code attempts to send the alert to a .NET Alerts routing engine emulator on the local computer.
' The URL for the PREP .NET Alerts routing engine will be provided when you register to become a .NET Alerts provider.
Transport.DestinationUrl = "https://localhost/MSAlertsSDKServer/MSAlertsSDKServer.dll"

' Create and initialize an alert.
Dim Alert As Object
Set Alert = CreateObject("MSNOTIFY.Notification")

Alert.ID = 12345
Alert.ToPID = "0x01234567:0x89abcdef"
Alert.MessageID = 0
Alert.Priority = 1
Alert.SiteID = "114001000"
Alert.SiteURL = "https://www.adventure-works.com"
' The relative path to the action URL page, including two custom parameters, param1 and param2.
' Note that the ampersand is XML-encoded.
Alert.ActionURL = "/action.asp?param1=data1&param2=data2"
Alert.SubscribeURL = "/subscr.asp"
Alert.BodyIcon = "/aw_logo.png"
Alert.Body = "<TEXT>Your Adventure Works order has been shipped.</TEXT>"

Dim Password as String
Dim UserName as String

Password = vbNullString
UserName = vbNullString

RetrySend:

On Error Resume Next
    ' You should always include some retry logic in your alert-sending code. Sometimes a transient
    ' network problem will cause a SendNotification call to fail. The send operation will often
    ' succeed upon another attempt.  The following code will attempt to send the alert up to three
    ' times. It accepts failure only if the send operation returns an error three times
    ' in a row.
Call Transport.SendNotification(True, UserName, Password, Alert, Alert.ID)

If Not Err.Number = 0 Then
    ' The sleep function is exported from kernel32.dll. To access it, include this library declare statement in your code module:
    ' Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sleep(1000)
    RetryCount = RetryCount + 1
                If RetryCount < 4 Goto RetrySend
End If

If Not Err.Number = 0 Then

    ' Custom error codes by the .NET Alerts SDK match 0x81fdxxxx.
    If (Not (Mid$(Hex$(Err.Number), 1, 4)) = "81FD") Then

        MsgBox ("A COM error occurred while calling SendNotification: " & _
            Hex$(Err.Number) & " " & _
            Err.Description)

    Else

        Dim ErrorMessage As String

            Select Case (Err.Number)

                Case (&H81FD0001)
                    ErrorMessage = _
                   "There was a problem retreiving the .NET " + _
                   "Alerts provider credentials from the registry."

                Case (&H81FD0002)

                    ErrorMessage = _
                    "A send request was made while waiting for DrainNotifications."

                Case (&H81FD0004)

                    ErrorMessage = _
                    "Memory or resource issues caused a failure in the HTTP transport."

                Case (&H81FD0191)

                    ErrorMessage = _
"Authentication of the .NET Alerts provider failed."

                Case (&H81FD01F4)

                    ErrorMessage = _
                    "There was a general delivery failure."

                Case Else

                    ErrorMessage = _
                    "An unexpected error occurred."

            End Select

            MsgBox ("A COM error occurred while calling SendNotification: " & _
                Hex$(Err.Number) & " " & _
                ErrorMessage)

        End If

End If

' After SendNotification has been called, the properties on the transport
' object become read-only. The following call set operation will always fail
' with a catastrophic error.
On Error Resume Next
Transport.DestinationUrl = "http://some-other-url/nrouter/nrouter.dll"

' Free the transport.
Set Transport = Nothing
Set Alert = Nothing

解説

Microsoft では、Microsoft Windows レジストリに .NET Alerts プロバイダの credential をインストールするユーティリティを提供しています。セキュリティ保護に役立つように、このユーティリティは credential の一部分を暗号化します。通常の (Production) 環境のもとでは、SendNotification メソッドは必要な credential をレジストリから取り出します。パスワードとユーザー名のパラメータは、NULL 文字列 (vbNullString) にする必要があります。SendNotification の呼び出しにユーザー名とパスワードを指定すると、レジストリに格納されている credential が使用できなくなります。この作業は、テストの場合にのみ行ってください。Production システムでは、レジストリに格納されている credential だけを使用するようにします。詳細については、「InstallSDKKey.exe を使用する」を参照してください。

InstallSDKKey.exe のコピーが .NET Alerts Developer Edition に含まれています。このコピーには、.NET Alerts Developer Edition でのみ使用するよう意図されたダミーの credential が含まれています。InstallSDKKey.exe のこのコピーによってインストールされる credential は、実際の .NET Alerts ルーティング エンジンでは機能しません。このため、Preproduction (PREP) または Production 環境の .NET Alerts ルーティング エンジンに通知を送信するには、自分が .NET Alerts プロバイダになるように登録して、自分の credential を取得する必要があります。詳細については、「アプリケーションを登録する」を参照してください。

通知送信コードには、必ず再試行ロジックを組み込むようにしてください。ネットワークに一時的な問題が発生すると、SendNotification 呼び出しが失敗することがあります。このような場合、再試行によって送信操作がうまくいくことがよくあります。

.NET Alerts クライアント ライブラリは、SendNotification の呼び出しが失敗するたびに、エラー ログ エントリを Windows のアプリケーション イベント ログに書き出します。このログ エントリには、メソッド呼び出しからのリターン コード、HTTP 状態コード、およびエラーを生成した呼び出しの Token パラメータの値が含まれています。イベント ビューアを使用すると、アプリケーション イベント ログに含まれるこれらのエントリを調べることができます。

SendNotification の呼び出しに対して例外が発生しなかった場合は、Microsoft .NET Alerts ルーティング エンジンによって通知が処理のために受け入れられています。 呼び出しの正常な終了は、.NET Alerts ルーティング エンジンによって通知が処理のために受け入れられたかどうかのみを示します。通知が最終的な配信先に配信されたかどうかは示しません。最初に処理のために受け入れられた通知は、その後 .NET Alerts ルーティング エンジンによって削除 (サイレントで破棄) される場合があります。

通知の送信は、次のいずれかの理由で .NET Alerts ルーティング エンジンによって拒否される場合があります。その場合は、送信者にエラーが返されます。

  • credential が不足しているか正しくないため、トランスポートが .NET Alerts ルーティング エンジンで認証されません。
  • 配信先 URL が正しくありません。
  • 通知のプロパティの形式に誤りがあるか、プロパティが正しくありません。
  • 一時的なネットワーク エラーのために、通知が .NET Alerts ルーティング エンジンに到達できません。

.NET Alerts ルーティング エンジンは、次のいずれかの理由で、受け入れた後に通知を削除する場合があります。その場合は、送信者にエラーは返されません。

  • 受信者の PUID が無効か、または存在しません。
  • 受信者の PUID に、通知を送信する .NET Alerts プロバイダとのサブスクリプションがありません。
  • 受信者が、通知を送信する .NET Alerts プロバイダからの通知の配信設定で、[この通知を受信しない] オプションを選択しました。
  • .NET Alerts ルーティング エンジンに内部エラーが発生しました。

現時点では、通知が配信されたことを確認する唯一の方法は、通知に埋め込まれているアクション用 URL を受信者が呼び出すかどうかを調べることです。通知の配信先を調べる方法については、「MsnNotification.ActionURL プロパティ」を参照してください。

関連項目

Visual Basic リファレンスの概要

  |