Найдено результатов: 9

Как использовать сокет C API в C++ на z/OS

У меня возникли проблемы с получением C сокетов API для правильной работы в C++ на z/OS .

Хотя я включаю sys/socket.h, я все еще получаю ошибки времени компиляции, говорящие мне, что AF_INET не определен.

Я упускаю что-то очевидное, или это связано с тем, что нахождение на z/OS делает мои проблемы намного более сложными?


Update : при дальнейшем расследовании я обнаружил, что есть #ifdef , который я поражаю. Очевидно, z/OS не будет счастлив, если я не определю, с какими "type" сокетами я использую:

#define _OE_SOCKETS

Теперь я лично понятия не имею, для чего это _OE_SOCKETS на самом деле, так что если там есть программисты z/OS сокетов (все 3 из вас), возможно, вы могли бы дать мне краткое описание того, как это все работает?


Тестовое Приложение

#include <sys/socket.h>

int main()
{
    return AF_INET;
}

Компиляции/Link Выход :

cxx -Wc,xplink -Wl,xplink -o inet_test inet.C

"./inet.C", line 5.16: CCN5274 (S) The name lookup for "AF_INET" did not find a declaration.
CCN0797(I) Compilation failed for file ./inet.C. Object file not created.

Проверка sys/sockets.h действительно включает в себя определение, которое мне нужно, и, насколько я могу судить, оно не блокируется никакими операторами #ifdef.

Однако я заметил, что он содержит следующее:

#ifdef __cplusplus
  extern "C" {
#endif

который инкапсулирует в основном весь файл. Не уверен, что это имеет значение.

c++   c   sockets   mainframe   zos    

516   9   16:03, 1st July, 2020


Как создать учетные записи пользователей поддоменов в веб-приложении

Я ищу, чтобы позволить пользователям контролировать поддомен приложения, с которым я играю, так же, как Basecamp, где это customusername.seework.com .

Что требуется на конце DNS , чтобы позволить им создаваться динамически и быть доступными мгновенно.

И как вы рекомендуете бороться с этим в логике сайта? Правило Htaccess для поиска поддомена в DB ?

web-applications   dns   subdomain   account    

435   4   16:03, 1st July, 2020


В программе C/C++ как система (windows, linux, mac OS X) вызывает функцию main()

Я ищу более техническое объяснение, чем вызов функции OS. Может ли кто-нибудь помочь мне или указать мне на веб-сайт или книгу?

c++   c   main    

443   7   23:20, 9th August, 2020


Одна база данных или много?

Я разрабатываю веб-сайт, который будет управлять данными для нескольких объектов. Данные не являются общими для всех объектов, но они могут принадлежать одному и тому же клиенту. Клиент может захотеть управлять всеми своими сущностями из одного "dashboard". Так что я должен иметь одну базу данных для всего, или держать данные разделены на отдельные базы данных? Есть ли лучшая практика? Каковы положительные / отрицательные стороны для того, чтобы иметь:

  • база данных для всего сайта (сущности имеет "customerID", данные имеет "entityID")
  • база данных для каждого клиента (данные "entityID")
  • база данных для каждой сущности (отношение база данных для клиента находится за пределами база данных)

Несколько баз данных, похоже, будут иметь лучшую производительность (меньше строк и соединений), но в конечном итоге могут стать кошмаром обслуживания.

performance   database-design   multi-tenant   maintainability    

551   11   03:27, 12th August, 2020


Почему int main() {} компилируется?

(Я использую Visual C++ 2008) я всегда слышал, что main() требуется для возврата целого числа, но здесь я не вставлял return 0; и он компилировался с 0 ошибками и 0 предупреждениями! В окне отладки он говорит, что программа вышла с кодом 0. Если эта функция имеет имя, отличное от main(), компилятор жалуется, что 'blah' должно возвращать значение. Прилипание a return; также вызывает появление ошибки. Но если оставить его полностью, он прекрасно компилируется.

#include <iostream>
using namespace std;

int main()
{
    cout << "Hey look I'm supposed to return an int but I'm not gonna!\n";
}

Может быть, это ошибка в VC++?

c++   return-value   main    

402   4   20:18, 13th August, 2020


Ошибка подключения адаптера BizTalk DB2

Мои коллеги пытаются подключить BizTalk 2006 R2 через адаптер DB2/MVS к базе данных, размещенной на мэйнфрейме z/OS. При тестировании параметров подключения они получают следующую ошибку

Could not connect to data source 'New Data Source':
The network connection was terminated because the host failed to send any data.
SQLSTATE: 08S01, SQLCODE: -605

При вводе настроек в обычную строку подключения и открытии С.NET код, это нормально. Я новичок в BizTalk и DB2. Может ли кто-нибудь предложить, что нужно искать, когда эта ошибка всплывает?

24 августа 08:

Ну, если нормально .Используется код NET с обычной строкой соединения DB2, соединение может быть выполнено и Запросы отправлены. Этот адаптер DB2 сообщает, что он даже не может сделать правильное рукопожатие соединения, не говоря уже о отправке запросов. Я не уверен в том, какие фактические механизмы задействованы для создания соединения DB2.

25 августа 08:

Согласно этой публикации на форумах MSDN, это, похоже, проблема входа в систему.

Я видел это, и здесь это не так. Если мы поместим имя пользователя в качестве коллекции пакетов, он все равно столкнется с той же проблемой.

26 августа 08:

Из-за нехватки информации о подключении к базам данных mainframe DB2 из продуктов Microsoft я взял на себя задачу проверки необработанных сетевых пакетов, чтобы получить представление о том, что происходит между подключением поставщика .NET DB2 (которое работает) и адаптером BizTalk 2006 DB2 (который бомбит). Я заметил, что трафик DB2 выполняется с использованием протокола DRDA. И в конечном счете пришел к выводу, что метод адаптера BizTalk терпит неудачу из-за того, что записано в пакете ответа сервера SECCHKRM

DRDA (Security Check)
    DDM (SECCHKRM)
        Length: 55
        Magic: 0xd0
        Format: 0x02
            0... = Reserved: Not set
            .0.. = Chained: Not set
            ..0. = Continue: Not set
            ...0 = Same correlation: Not set
            DSS type: RPYDSS (2)
        CorrelId: 0
        Length2: 49
        Code point: SECCHKRM (0x1219)
    Parameter (Severity Code)
        Length: 6
        Code point: SVRCOD (0x1149)
        Data (ASCII): 
        Data (EBCDIC): 
    Parameter (Security Check Code)
        Length: 5
        Code point: SECCHKCD (0x11a4)
        Data (ASCII): 
        Data (EBCDIC): 
    Parameter (Server Diagnostic Information)
        Length: 34
        Code point: SRVDGN (0x1153)
        Data (ASCII): \304\331\304\301@\301\331z@\301\344\343\310\305\325\343\311\303\301\343\311\326\325@\206\201\211\223\205\204
        Data (EBCDIC): DRDA AR: AUTHENTICATION failed

Почему одни и те же учетные данные терпят неудачу здесь при успешном выполнении .NET поставщик находится за пределами меня. Прямо сейчас я могу наблюдать заметную разницу между каждым методом, когда речь заходит о последовательности передаваемых пакетов.

.Поставщик сетка DB2

No.     Time        Source                Destination           Protocol Info
      1 0.000000    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=1
      2 0.000399    [DB2 server IP]          [client IP]         TCP      50000 > kpop [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460 WS=0
      3 0.000414    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [ACK] Seq=1 Ack=1 Win=65536 [TCP CHECKSUM INCORRECT] Len=0
      4 0.000532    [client IP]         [DB2 server IP]          DRDA     EXCSAT | ACCSEC
      5 0.038162    [DB2 server IP]          [client IP]         DRDA     EXCSATRD | ACCSECRD
      6 0.041829    [client IP]         [DB2 server IP]          DRDA     ACCSEC | SECCHK | ACCRDB
      7 0.083626    [DB2 server IP]          [client IP]         TCP      50000 > kpop [ACK] Seq=108 Ack=542 Win=65535 Len=0
      8 0.190534    [DB2 server IP]          [client IP]         DRDA     ACCSECRD | SECCHKRM | ACCRDBRM | SQLCARD
      9 0.199776    [client IP]         [DB2 server IP]          DRDA     PRPSQLSTT | SQLATTR | SQLSTT | OPNQRY
     10 0.293307    [DB2 server IP]          [client IP]         TCP      [TCP segment of a reassembled PDU]
     11 0.293359    [DB2 server IP]          [client IP]         TCP      [TCP segment of a reassembled PDU]
     12 0.293377    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [ACK] Seq=870 Ack=1444 Win=64092 [TCP CHECKSUM INCORRECT] Len=0
     13 0.293404    [DB2 server IP]          [client IP]         TCP      [TCP segment of a reassembled PDU]
     14 0.293452    [DB2 server IP]          [client IP]         TCP      [TCP segment of a reassembled PDU]
     15 0.293461    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [ACK] Seq=870 Ack=2516 Win=65536 [TCP CHECKSUM INCORRECT] Len=0
     16 0.293855    [DB2 server IP]          [client IP]         TCP      [TCP segment of a reassembled PDU]
     17 0.293908    [DB2 server IP]          [client IP]         DRDA     SQLDARD
     18 0.293918    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [ACK] Seq=870 Ack=3588 Win=64464 [TCP CHECKSUM INCORRECT] Len=0
     19 0.293957    [DB2 server IP]          [client IP]         DRDA     QRYDSC
     20 0.294008    [DB2 server IP]          [client IP]         DRDA     QRYDTA
     21 0.294017    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [ACK] Seq=870 Ack=4660 Win=65536 [TCP CHECKSUM INCORRECT] Len=0
     22 0.294023    [DB2 server IP]          [client IP]         DRDA     SQLCARD
     23 0.295346    [client IP]         [DB2 server IP]          DRDA     RDBCMM
     24 0.297868    [DB2 server IP]          [client IP]         DRDA     ENDUOWRM | SQLCARD
     25 0.421392    [client IP]         [DB2 server IP]          DRDA     PRPSQLSTT | SQLATTR | SQLSTT | OPNQRY
     26 0.456504    [DB2 server IP]          [client IP]         DRDA     SQLDARD | OPNQRYRM | TYPDEFNAM | QRYDSC | QRYDTA | ENDQRYRM | TYPDEFNAM | SQLCARD
     27 0.456756    [client IP]         [DB2 server IP]          DRDA     RDBCMM
     28 0.488311    [DB2 server IP]          [client IP]         DRDA     ENDUOWRM | SQLCARD
     29 0.498806    [client IP]         [DB2 server IP]          DRDA     PRPSQLSTT | SQLATTR | SQLSTT | OPNQRY
     30 0.630477    [DB2 server IP]          [client IP]         TCP      50000 > kpop [ACK] Seq=5157 Ack=1579 Win=65171 Len=0
     31 0.788165    [DB2 server IP]          [client IP]         DRDA     SQLDARD | OPNQRYRM | TYPDEFNAM | QRYDSC | QRYDTA
     32 0.788203    [DB2 server IP]          [client IP]         DRDA     ENDQRYRM
     33 0.788225    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [ACK] Seq=1579 Ack=5815 Win=64380 [TCP CHECKSUM INCORRECT] Len=0
     34 0.788648    [client IP]         [DB2 server IP]          DRDA     RDBCMM
     35 0.795951    [DB2 server IP]          [client IP]         DRDA     ENDUOWRM | SQLCARD
     36 0.807365    [client IP]         [DB2 server IP]          DRDA     PRPSQLSTT | SQLATTR | SQLSTT | OPNQRY
     37 0.838046    [DB2 server IP]          [client IP]         DRDA     SQLDARD | OPNQRYRM | TYPDEFNAM | QRYDSC | QRYDTA | ENDQRYRM | TYPDEFNAM | SQLCARD
     38 0.838328    [client IP]         [DB2 server IP]          DRDA     RDBCMM
     39 0.841866    [DB2 server IP]          [client IP]         DRDA     ENDUOWRM | SQLCARD
     40 0.973506    [client IP]         [DB2 server IP]          TCP      kpop > 50000 [ACK] Seq=1906 Ack=6304 Win=65482 [TCP CHECKSUM INCORRECT] Len=0

BizTalk DB2 адаптер

No.     Time        Source                Destination           Protocol Info
      1 0.000000    [client IP]          [DB2 server IP]          TCP      28165 > 50000 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=8
      2 0.002587    [DB2 server IP]          [client IP]          TCP      50000 > 28165 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460 WS=0
      3 0.010146    [client IP]          [DB2 server IP]          TCP      28165 > 50000 [ACK] Seq=1 Ack=1 Win=65536 Len=0
      4 0.019698    [client IP]          [DB2 server IP]          DRDA     EXCSAT
      5 0.020849    [DB2 server IP]          [client IP]          DRDA     EXCSATRD
      6 0.034699    [client IP]          [DB2 server IP]          DRDA     ACCSEC
      7 0.036584    [DB2 server IP]          [client IP]          DRDA     ACCSECRD
      8 0.042031    [client IP]          [DB2 server IP]          DRDA     SECCHK
      9 0.046350    [DB2 server IP]          [client IP]          DRDA     SECCHKRM
     10 0.046642    [DB2 server IP]          [client IP]          TCP      50000 > 28165 [FIN, ACK] Seq=160 Ack=200 Win=65336 Len=0
     11 0.053787    [client IP]          [DB2 server IP]          TCP      28165 > 50000 [ACK] Seq=200 Ack=161 Win=65536 Len=0
     12 0.056891    [client IP]          [DB2 server IP]          DRDA     ACCRDB
     13 0.058084    [DB2 server IP]          [client IP]          TCP      50000 > 28165 [RST, ACK] Seq=161 Ack=295 Win=0 Len=0

Интересно наблюдать за происходящим .Провайдер NET выдает различные пакеты протокола DRDA внутри в одном сегменте TCP. С другой стороны, адаптер BizTalk размещает только один пакет протокола на сегмент TCP. Я не знаю, почему это так. Однако на данный момент я думаю, что это отвлекающий маневр, и истинная разница, вызывающая сбой аутентификации, заключается в обмене данными DRDA. Я не знаю протокола DRDA, поэтому мне придется изучить его, прежде чем я смогу понять его больше.

18 сентября 08:

На данном этапе проблема все еще не решена, так как получение сотрудничества от команды DB2 DBA и помощи от Microsoft было встречено со многими препятствиями.

То, что я хочу сообщить, это то, что я заметил, Возможно, одно решающее различие между всеми случаями успешного соединения и неудачной попытки:

Адаптер BizTalk DB2 в основном использует драйвер Microsoft ODBC для DB2 . Другие успешные тесты программного обеспечения используют драйвер IBM DB2 ODBC или драйвер IBM DB2 ODBC-IBMCL1 . Конфигурация параметров драйвера IBM отличается от драйвера Microsoft. Но мы не видим каких-либо явно критических различий, которые могут привести к неудачной проверке подлинности для драйвера Microsoft.

db2   biztalk   mainframe   zos   biztalk2006r2    

399   3   19:35, 5th August, 2020


Могу ли я иметь агрегаты "incomplete" в DDD?

DDD утверждает, что вы должны получать доступ к сущностям только через их совокупный корень. Так скажем, например, что у вас есть совокупный корень X, который потенциально имеет много дочерних сущностей Y. Теперь, для некоторого сценария, вы действительно заботитесь только о подмножестве этих объектов Y за один раз (возможно, вы показываете их в списке подкачки или что-то еще).

Это OK для реализации репозитория, так что в таких сценариях он возвращает неполный агрегат? То есть. объект X, коллекция Ys которого содержит только интересующие нас экземпляры Y, а не все из них? Это может, например, привести к тому, что методы на X, которые выполняют некоторые вычисления с участием Ys, не будут вести себя так, как ожидалось.

Возможно, это указывает на то, что рассматриваемая сущность Y должна рассматриваться как повышенная до агрегированного корня?

Моя текущая идея (в C#)-использовать отложенное выполнение LINQ, чтобы мой объект X имел IQueryable для представления его отношений с Y. Таким образом, я могу иметь прозрачную ленивую загрузку с фильтрацией... Но заставить это работать с ORM (Linq до Sql в моем случае) может быть немного сложно.

Есть еще умные идеи?

domain-driven-design    

459   5   03:14, 15th August, 2020


WCF-объекты домена и IExtensibleDataObject

Типичный сценарий. Мы используем старой школы XML internally web-сервисов для обмена данными между серверами фермы и нескольких распределенных и локальных клиентов. Никакие третьи лица не участвуют, только наши приложения, используемые нами и нашими клиентами.

В настоящее время мы размышляем о переходе от модели XML WS к модели WCF/object-based и экспериментируем с различными подходами. Один из них включает в себя передачу объектов домена / агрегатов непосредственно по проводу, возможно, вызывая атрибуты DataContract на них.

Используя IExtensibleDataObject и DataContract с помощью свойства Order на DataMembers, мы должны быть в состоянии справиться с простыми проблемами управления версиями свойств (помните, что мы контролируем всех клиентов и можем легко принудительно обновить их).

Я постоянно слышу, что мы должны использовать выделенные объекты передачи данных только для передачи данных ( DTOs ) по проводу.

Почему? Есть ли еще причина для этого? Мы используем одну и ту же модель домена на стороне сервера и на стороне клиента, конечно, предварительно заполняя коллекции и т. д. только в том случае, когда это считается правильным, и свойства коллекции "necessary." используют принцип Service locator и IoC для вызова либо NHibernate-based "service" для прямой выборки данных (на стороне сервера), либо клиента WCF "service" на стороне клиента для связи с фермой серверов WCF .

Итак-почему мы должны использовать DTOs ?

wcf   serialization   soap   domain-driven-design   soa    

416   2   21:09, 27th August, 2020