Не удается отправить факс с помощью RFCOMAPILIb
Мы пытаемся отправить факс, используя RFCOMAPILIb.dll, используя приведенный ниже код (мы получили пример из самого переполнения стека)
RFCOMAPILib.FaxServerClass faxserver = new RFCOMAPILib.FaxServerClass();
faxserver.ServerName = "ServerName";
faxserver.Protocol = RFCOMAPILib.CommunicationProtocolType.cpNamedPipes;
faxserver.UseNTAuthentication = RFCOMAPILib.BoolType.True;
faxserver.OpenServer();
RFCOMAPILib.Fax fax = (RFCOMAPILib.Fax) faxserver.get_CreateObject(RFCOMAPILib.CreateObjectType.coFax);
// set up your 'fax' object the way you want it, below is just some sample options
fax.ToName = "dummy";
fax.ToFaxNumber = "dummy";
fax.ToVoiceNumber = "dummy";
fax.ToCompany = "dummy";
fax.FromName = "My Company";
fax.FromVoiceNumber = "dummy";
fax.Send();
string status=fax.faxstatus.tostring();
мы получаем faxstatus как 110. Пользователь не может получить факс.
Любая идея, в чем может быть проблема. Нужно ли устанавливать какое-либо программное обеспечение специально для правильного факса на клиентском компьютере. Интересно, что с одной и той же машины мы можем отправлять факсы с помощью пользовательского интерфейса, предоставленного после установки Правильного клиента факса, поэтому мы не думаем о проблемах с портом, брандмауэром и т. Д. Любая помощь будет принята с благодарностью.
1 ответ
После того, как вы позвоните,
fax.Send ()
Затем вы должны сделать следующее:
RFHandle = fax.Handle ()
RFHandle предоставит вам доступ к СОЗДАННОМУ ФАКСУ на самом сервере (объект факса, который вы изначально создали, не обновляется при вызове fax.Send, за исключением того, что вы получаете дескриптор, назначенный RightFax).
Затем вы можете периодически использовать этот RFHandle для получения текущей версии объекта факса с сервера RightFax, который будет включать текущее состояние факса. Например, после отправки факса подождите несколько секунд (RightFax нужно немного времени для создания изображения факса) и позвоните...
fax = faxserver.fax(RFHandle)
Это заполнит ваш объект факса текущими значениями для этого факса. Затем вы можете проверить его статус через....
Status = fax.FaxStatus
(Различные значения FaxStatus определены в RFCOMAPILIB.FaxStatusType)
Ваш статус будет сначала "Неполный", затем "NeedsFCS" (конверсия таблицы), и планируется отправка, отправка и, в конечном счете, "DoneOK" и "DoneFailure" на основе фактической отправки. Есть также собственность,
fax.FaxErrorCode
который, если у вас было FaxStatus = DoneFailure, FaxErrorCode предоставит вам более конкретную информацию о том, почему факс не удалось отправить.
Последнее, на что следует обратить внимание в вашем примере, вы не установили fax.OwnerId. Это будет указывать, под каким аккаунтом будет отправлен факс. Сверху он будет отправлен через учетную запись, связанную с вашей учетной записью NT. Это может быть тем, что вы хотите, но свойство OwnerID может позволить вам использовать другие учетные записи (требуются разрешения / права).
ПРИМЕЧАНИЕ. Если вы хотите подождать, пока факс не будет отправлен (чтобы узнать, был ли он успешным или нет), вы должны включить задержку между каждым вызовом, по факсу = faxserver.fax(RFHandle). Вы должны делать этот вызов каждый раз чтобы получить обновление для факса. Если вы отправляете факс (он не установлен для удержания для предварительного просмотра, а учетная запись не установлена для удержания для подтверждения), рекомендуется использовать интервал ожидания от 30 секунд до 1 минуты (если вы не используете FoIP, факс по IP). Для отправки страницы факса по телефонным линиям требуется время, примерно 1 минута на страницу является общей оценкой, помните, что там есть не только ваш факс-сервер, но и принимающий факсимильный аппарат. Ваш фактический пробег может отличаться.