質問
IPCを使用して次のエラーを受け取りました。
" IPCポートへの接続に失敗しました:指定されたファイルが見つかりません。"
この問題はWindows 2003サーバーで発生しています。
もちろん、本番環境でのみ発生します。開発環境でこれを再現することはできません。
IPCを使用しようとしているWindowsサービスは、ローカルシステムとして実行されています。
変更が必要な何らかの許可がありますか?
解決
スピンアップする前にチャンネルにアクセスしようとしました。そのため、「見つかりません」というエラーが表示されます。アクセスコードをいくつかの「本当に準備ができている」コードにラップすることで問題が修正されました。
他のヒント
私にとって、DTAは正常に機能していました。しかし、突然この同じエラーが表示されるようになりました。
私にとって修正はこれでした:
-> Go To Task Manager
-> Go To Processes Tab
-> Find and kill the DTA process. For me this process is named as 'DTASHELL.exe'
今、DTAを起動してみてください。これで動作するはずです:-)
実稼働コードでこの問題が発生しました。ユーザーのシステムのごく一部で失敗していました。
エラーは、使用しているMicrosoftコードにあることが判明しました。ユーザー名を使用してIPCチャネルを生成します。
ipc:// APP_USER_000:SingeInstanceIPCChannel / SingleInstanceApplicationService
ユーザー名に特定の文字が含まれていると、無効なチャンネルURLが生成されるため、受信アプリはそもそもチャンネルを作成できません。
修正は、ユーザー名の最初の文字ではなく、ユーザー名のハッシュを使用することです。
(ここでコードを使用していました: http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx )
サーバーチャネルの初期化とオブジェクトの公開に使用するコードと、リモートオブジェクトにアクセスするときに使用するURIを含むクライアントコードを投稿してください。
よくある落とし穴は、辞書でチャンネルを初期化し、
を使用してチャンネルの名前を設定するときですdic["name"] = "channelName";
//used for retrieving the channel - ChannelServices.GetChannel("channelName");
の代わりに
dic["portName"] = "channelName";
//used as the identifier for the named pipe -
//The client should get the object from the uri : ipc://channelName/objectName