Как видно из названия, у меня есть приложение .NET C# Winforms с элементом управления WebBrowser. Я использую его для загрузки (динамически сгенерированного) файла Excel с веб-сайта, и он работает нормально. Я должен использовать WebControl в соответствии с просьбой моего работодателя.Работа с SQL-агентом выполняется с использованием приложения .NET C# WinForms с элементом управления WebBrowser. Попытка отправить ключевые штрихи
Когда я использую задание агента SQL для запуска пакета SSIS с выполнением задачи выполнения для выполнения приложения, он не работает (как в файле не загружен). Если я запустил пакет SSIS, он работает правильно. Разница заключается в том, что SQL Job не отображается в окне приложения.
Когда элемент управления WebBrowser показывает диалог Open-Download-Close, я посылаю нажатия клавиш (Alt + S) для сохранения файла и закрытия диалогового окна. Когда SQL Job запускает приложение, нажатия клавиш никогда не попадают в WebBroser.
Я попытался отправить ключи с помощью SendKeys.SendWait, а также с помощью User32 dll, чтобы получить диалоги и кнопки, а затем SendMessage/PostMessage (попробовал оба), чтобы отправить штрихи клавиш. Оба метода корректно работают как exe и как пакет SSIS. И оба метода не работают при выполнении SQL Job.
Я также попытался переопределить диспетчер загрузки, как предложено here, без успеха. Честно говоря, я не знаю, что делать, чтобы получить динамически созданный файл Excel, который приложение должно загружать, когда выполнение достигает переопределенного метода загрузки. Ссылка, которую я получаю при отладке метода Download, не является ссылкой на файл.
/// <summary>
/// Return S_OK (0) so that IE will stop to download the file itself.
/// Else the default download user interface is used.
/// </summary>
public int Download(IMoniker pmk, IBindCtx pbc, uint dwBindVerb, int grfBINDF, IntPtr pBindInfo,
string pszHeaders, string pszRedir, uint uiCP)
{
// Get the display name of the pointer to an IMoniker interface that specifies the object to be downloaded.
string name;
pmk.GetDisplayName(pbc, null, out name);
if (!string.IsNullOrEmpty(name))
{
Uri url;
if (Uri.TryCreate(name, UriKind.Absolute, out url))
{
if (FileDownloading != null)
{
FileDownloading(this, new FileDownloadEventArgs(url));
}
return Constants.S_OK;
}
}
return 1;
}
Это заголовок ответа, когда я нажимаю кнопку, чтобы загрузить файл:
Content-Disposition: attachment; filename="file.xlsx"
Content-Transfer-Encoding: binary
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Я могу предоставить с кодом приложения, если требуется.
Любая помощь была бы действительно оценена. Извините мой плохой английский.
С уважением
Это глупо. К сожалению, мне не разрешено использовать Fiddler в dev-машине, и мне было предложено использовать класс WebBrowser. Я пытаюсь реализовать это решение, но я как бы застрял: http://stackoverflow.com/questions/13362922/windows-forms-webbrowswer-control-with-idownloadmanager – 1Tester