{"id":363,"date":"2018-04-24T23:19:45","date_gmt":"2018-04-24T21:19:45","guid":{"rendered":"http:\/\/wchmurze.cloud\/?p=363"},"modified":"2019-08-18T14:50:38","modified_gmt":"2019-08-18T12:50:38","slug":"uniwersalna-procedura-aktywacyjna-service-brokera","status":"publish","type":"post","link":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/","title":{"rendered":"Uniwersalna procedura aktywacyjna Service Brokera"},"content":{"rendered":"<p>Us\u0142uga Service Brokera, kt\u00f3ra pojawi\u0142a si\u0119 wraz z wersja 2005 zadziwia mnie do tej pory.<br \/>\nOd wielu lat producent niewiele w niej zmienia, co mo\u017ce \u015bwiadczy\u0107 o dobrze przemy\u015blanej architekturze.<br \/>\nZ drugiej strony monitoring tej us\u0142ugi dostarczony przez producenta pozostawia wiele do \u017cyczenia patrz\u0105c na to nawet z ergonomicznego puntku widzenia. Walka z wy\u0142\u0105czaj\u0105cymi si\u0119 kolejkami i komunikatami typu poison sp\u0119dzi\u0142a nie jeden sen z powiek. Jak sobie z tym najlepiej poradzi\u0107 ?<br \/>\nZak\u0142adam, \u017ce czytelnik zna podstawow\u0105 budow\u0119 Service Brokera i ma do\u015bwiadczenie w jego stosowaniu w warunkach produkcyjnych. To o czym nale\u017cy pami\u0119ta\u0107, to \u015bwiadomo\u015b\u0107, \u017ce wbudowano w serwer bazodanowy mechanizm, kt\u00f3ry potrafi obs\u0142u\u017cy\u0107 za pomoc\u0105 j\u0119zyka t-sql komunikacj\u0119 asynchroniczn\u0105 bez pomocy zewn\u0119trznych narz\u0119dzi. To niew\u0105tpliwie wielki plus funkcjonalny.<br \/>\nChcia\u0142bym skoncentrowa\u0107 si\u0119 nad propozycj\u0105 budowy szkicu uniwersalnej procedury aktywacyjnej, kt\u00f3ra obs\u0142uguje kolejk\u0119 targetow\u0105.<br \/>\nDokumentacja Microsoftu sprowadza si\u0119 do budowy dedykowanej per kolejka procedury aktywacyjnej, gdzie spore fragmenty kodu s\u0105 powtarzane i jest to nieco niezgodne z podej\u015bciem DRY.<br \/>\nPrzyj\u0119te za\u0142o\u017cenia:<br \/>\n1. Przekazywane s\u0105 jedynie komunikaty w formie XML<br \/>\n2. Ka\u017cdy typ komunikatu XML na podstawie jego root elementu b\u0119dzie obs\u0142ugiwany przez dedykowan\u0105 procedur\u0119 sk\u0142adowan\u0105<br \/>\n3. Ka\u017cda z takich procedur ma standardow\u0105 posta\u0107<\/p>\n<pre lang=\"tsql\">CREATE PROCEDURE [dbo].[spInterfaceSystemV2Operation]\r\n\t@InXML xml(dbo.scmInterfaceSystemV2Operation),\r\n\t@OutXML xml(dbo.scmInterfaceSystemV2Operation) output,\r\n\t@ErrorType varchar(200) output,\r\n\t@ErrorMsg varchar(4000) output\r\n\t\r\n\tAS\r\n\tBEGIN\r\n\t  RETURN(0)\r\n\tEND\r\n    \r\n<\/pre>\n<p>4. Wszystkie obiekty bazodanowe s\u0105 obr\u0119bie jednej bazy.<br \/>\n5. Wykorzystany zostanie dynamiczny sql.<br \/>\n6. Procedura przyjmie minimaln\u0105 liczb\u0119 argument\u00f3w i stanie si\u0119 wewn\u0119trzn\u0105 procedur\u0105 aktywacyjn\u0105 ka\u017cdej z kolejek targetowych.<\/p>\n<p>Proponowany nag\u0142\u00f3wek:<\/p>\n<pre class=\"\" lang=\"tsql\">CREATE PROCEDURE [dbo].[spGenericActivationProcedure]\r\n@QueueName varchar(255) -- Nazwa kolejki targetowej,\r\n@OnErrorRollbackToQueue bit -- Spos\u00f3b obs\u0142ugi b\u0142\u0119dnych komunikat\u00f3w\r\n\r\nAS\r\n\r\nBEGIN\r\n  RETURN(0)\r\nEND\r\n\r\n<\/pre>\n<p>Powi\u0105zanie uniwersalnej procedury aktywacyjnej z przyk\u0142adow\u0105 kolejk\u0105<\/p>\n<p>Niech nasza kolejka nazywa si\u0119 <strong>SampleTargetQueue<\/strong>.<\/p>\n<p>Przygotowujemy procedur\u0119 nakladkow\u0105 definiowan\u0105 per kolejka<\/p>\n<pre lang=\"tsql\">\r\nCREATE PROCEDURE [dbo].[SpGenericActivation_SampleTargetQueue]\r\nAS\r\nBEGIN\r\n\r\n\tDECLARE @RC int\r\n\tDECLARE @QueueName varchar(255)\r\n\tDECLARE @OnErrorRollbackToQueue bit\r\n\t\r\n\tset @QueueName='SampleTargetQueue'\r\n\tset @OnErrorRollbackToQueue=0\r\n\r\n\tEXECUTE @RC = [dbo].[spGenericActivationProcedure] \r\n    @QueueName=@QueueName\r\n   ,@OnErrorRollbackToQueue=@OnErrorRollbackToQueue\r\n\r\nEND\r\n<\/pre>\n<p>Powi\u0105zanie kolejki docelowej z tak przygotowan\u0105 procedur\u0105 aktywacyjn\u0105.<\/p>\n<pre lang=\"tsql\">\r\nALTER QUEUE [dbo].[SampleTargetQueue] \r\nWITH STATUS = ON , \r\nRETENTION = OFF , \r\nACTIVATION \r\n(  STATUS = ON , PROCEDURE_NAME = [dbo].[SpGenericActivation_SampleTargetQueue] , \r\nMAX_QUEUE_READERS = 3 , EXECUTE AS OWNER  ), \r\nPOISON_MESSAGE_HANDLING (STATUS = ON) \r\n\r\n<\/pre>\n<p>Szkic funkcjonalny uniwersalnej procedury aktywacyjnej<\/p>\n<p>1. Pobranie z kolejki pierwszego komunikatu XML<\/p>\n<pre lang=\"tsql\">\r\nDECLARE @ReceiveSql NVARCHAR(MAX)\r\nDECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER\r\nDECLARE @RecvReqMsg varbinary(max)\r\nDECLARE @RecvReqMsgXml xml\r\nDECLARE @RecvReqMsgName sysname\r\nDECLARE @RecvReqValidation nchar(2)\r\nSELECT @ReceiveSql =\r\n' WAITFOR\r\n\t( RECEIVE TOP(1)\r\n\t\t@RecvReqDlgHandle = conversation_handle,        \r\n\t\t@RecvReqMsg = message_body,\r\n\t\t@RecvReqMsgName = message_type_name,\r\n\t\t@RecvReqValidation = validation\r\n\t\tFROM ' + @QueueName + '\r\n\t), TIMEOUT 1000'\r\n\r\n<\/pre>\n<p>2. Na podstawie root elementu XML ustalenie nazwy procedury sk\u0142adowanej odpowiedzialnej za logik\u0119 biznesow\u0105<\/p>\n<p>Proponowany kod transformacji :<\/p>\n<pre lang=\"tsql\" >\r\n\r\n DECLARE @inXML XML\r\n DECLARE @ServiceName nvarchar(300)\r\n DECLARE @ServiceNamespace nvarchar(600)    \r\n DECLARE @ProcedureName nvarchar(200)\r\n DECLARE @NamespaceSPPrefix nvarchar(200)\r\n DECLARE @ServiceQName nvarchar(300)\r\n declare @PrefixNameSpace nvarchar(100)\r\n\r\n set  @PrefixNameSpace='http:\/\/mycompany.com\/interface\/'\r\n\r\n set @inXML='<ns3:GetAccountNumber xmlns:ns3=\"http:\/\/mycompany.com\/interface\/Account\/V5\/getNumber\">\r\n  <Accounts>\r\n      <Account>\r\n     <Id>11111<\/Id>\r\n\t<\/Account>\r\n   <Account>\r\n     <Id>121212<\/Id>\r\n\t<\/Account>\r\n   <\/Accounts>\r\n  <Metrics>\r\n    <User>secret-user<\/User>\r\n    <System>SECRET-SYSTEM<\/System>\r\n    <Date>2018-04-18T13:25:08.896<\/Date>\r\n    <Uid>7B3A9067-6B13-4B6B-9068-83D2BFF671A6<\/Uid>\r\n  <\/Metrics>\r\n\r\n<\/ns3:GetAccountNumber>'\r\n\r\n SELECT @ServiceNamespace = cast(@inXML.query('namespace-uri(\/*[1])') as varchar(300)),\r\n        @ServiceName = cast(@inXML.query('local-name(\/*[1])') as varchar(600))\r\n        SELECT @ServiceQName = '{' + @ServiceNamespace + '}' + @ServiceName\r\n        SELECT @NamespaceSPPrefix = SUBSTRING(@ServiceNamespace, LEN(@PrefixNameSpace), 8000)         \r\n        SELECT @NamespaceSPPrefix = replace(@NamespaceSPPrefix, '\/', '')\r\n        SELECT @ProcedureName = 'spInterface' + @NamespaceSPPrefix + @ServiceName \r\n\t\t\r\n\t select @ServiceNamespace as [@ServiceNamespace],@ServiceName as [@ServiceName] ,\r\n\t\t@NamespaceSPPrefix as [@NamespaceSPPrefix] ,@ProcedureName as [@ProcedureName]\r\n        \r\n<\/pre>\n<p>W tym przypadku wyznaczamy  warto\u015b\u0107 nazwy procedury sk\u0142adowanej jako<br \/>\n<strong>spInterfaceAccountV5getNumberGetAccountNumber<\/strong><\/p>\n<p>3. Obs\u0142u\u017cenie sytuacji wyj\u0105tkowych, komunikat\u00f3w typu poison, XML-i niezgodnych ze schema parametru wej\u015bciowego procedury sk\u0142adowanej, wy\u0142\u0105czonej kolejki, naruszenia wi\u0119z\u00f3w integralno\u015b\u0107.<br \/>\n4. Wszystkie powy\u017csze punkty powinny by\u0107 realizowane w ramach jednej transakcji<\/p>\n<p>5. Zalogowane komunikaty b\u0142\u0119d\u00f3w trafiaj\u0105 do jednej wsp\u00f3lnej tabeli.<br \/>\nPropozycja takiej wsp\u00f3lnej tabeli<\/p>\n<pre lang=\"tsql\">\r\n\r\nCREATE TABLE [dbo].[GenericQueueFaultTable](\r\n\t[id] [bigint] IDENTITY(1,1) NOT NULL,\r\n\t[qName] [varchar](900) NULL,\r\n\t[eventTime] [datetime] NULL DEFAULT (getdate()),\r\n\t[inXML] [xml] NULL,\r\n\t[queue] [varchar](255) NULL,\r\n\t[exceptionMsg] [nvarchar](4000) NULL,\r\n\t[conversationId] [uniqueidentifier] NULL,\r\n\t[conversationHandle] [uniqueidentifier] NOT NULL,\r\n\t[callbackMessageSent] [bit] NULL,\r\n\t[status] [int] NOT NULL DEFAULT ((0)),\r\n\t[ChangeTime] [datetime] NOT NULL DEFAULT (getdate()),\r\n\t[ChangeOperator] [varchar](100) NOT NULL DEFAULT (suser_sname()),\r\n CONSTRAINT [pk_ServiceBrokerQueueFault] PRIMARY KEY CLUSTERED \r\n(\r\n\t[id] \r\n)\r\n\r\n<\/pre>\n<p>Przyk\u0142adowy fragment kodu uzupe\u0142niaj\u0105cego tabel\u0119 w przypadku wyst\u0105pienia b\u0142\u0119du:<\/p>\n<pre class=\"\" lang=\"tsql\">\r\n\r\nINSERT INTO [dbo].[GenericQueueFaultTable]\r\n\t\t\t   ([qName]\r\n\t\t\t   ,[inXML]\r\n\t\t\t   ,[queue]\r\n\t\t\t   ,[exceptionMsg]\r\n\t\t\t   ,[conversationId]\r\n\t\t\t   ,[conversationHandle]\r\n\t\t\t   )\r\n\t\t\tVALUES\r\n\t\t\t   (@QName\r\n\t\t\t   ,@InXml\r\n\t\t\t   ,@QueueName\r\n\t\t\t   ,@ExceptionMsg\r\n\t\t\t   ,@ConversationId\r\n\t\t\t   ,@RecvReqDlgHandle\r\n\t\t\t   )\r\n<\/pre>\n<p>Znaczenie pola status:<\/p>\n<table class=\"confluenceTable\">\n<tbody>\n<tr>\n<th class=\"confluenceTh mceSelected\">warto\u015b\u0107<\/th>\n<th class=\"confluenceTh mceSelected\" style=\"text-align: left;\">znaczenie<\/th>\n<th class=\"confluenceTh mceSelected\" colspan=\"1\">czy do ponownego przetworzenia<\/th>\n<\/tr>\n<tr>\n<td class=\"confluenceTd mceSelected\">0<\/td>\n<td class=\"confluenceTd mceSelected\">nowy wpis<\/td>\n<td class=\"confluenceTd mceSelected\" colspan=\"1\">TAK<\/td>\n<\/tr>\n<tr>\n<td class=\"confluenceTd mceSelected\">1<\/td>\n<td class=\"confluenceTd mceSelected\">wpis przetworzony z sukcesem<\/td>\n<td class=\"confluenceTd mceSelected\" colspan=\"1\">NIE<\/td>\n<\/tr>\n<tr>\n<td class=\"confluenceTd mceSelected\">2<\/td>\n<td class=\"confluenceTd mceSelected\">wpis przetworzony z b\u0142\u0119dem<\/td>\n<td class=\"confluenceTd mceSelected\" colspan=\"1\">TAK<\/td>\n<\/tr>\n<tr>\n<td class=\"confluenceTd mceSelected\" colspan=\"1\">3<\/td>\n<td class=\"confluenceTd mceSelected\" colspan=\"1\">nie wymaga przetworzenia<\/td>\n<td class=\"confluenceTd mceSelected\" colspan=\"1\">NIE<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Proste zapytanie monitoruj\u0105ce b\u0142\u0119dne wpisy w tabeli<\/p>\n<pre lang=\"TSQL\">\r\n\r\nselect  DB_NAME() as [DB_NAME()], \r\ncount(*) as numer,\r\nqName as qName,\r\nmin(eventTime) as minEventTime, \r\nmax(eventTime) as MaxEventTime,\r\nstatus  from  [dbo].[GenericQueueFaultTable] with (nolock)\r\nwhere status in (0,2)\r\ngroup by qName,status\r\norder by count(*) desc, qName,status\r\n\r\n<\/pre>\n<p>Nale\u017cy dodatkowo wprowadzi\u0107 polityk\u0119 retencji, gdzie po ustalonej liczbie dni, dane powinny by\u0107 usuwane trwale, w szczegolno\u015bci tam, gdzie status wskazuje na brak potrzeby ponownego przetworzenia.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Literatura<\/p>\n<p>https:\/\/sqlperformance.com\/2014\/03\/sql-performance\/configuring-service-broker<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Us\u0142uga Service Brokera, kt\u00f3ra pojawi\u0142a si\u0119 wraz z wersja 2005 zadziwia mnie do tej pory. Od wielu lat producent niewiele w niej zmienia, co mo\u017ce \u015bwiadczy\u0107 o dobrze przemy\u015blanej architekturze. Z drugiej strony monitoring tej us\u0142ugi dostarczony przez producenta pozostawia &hellip; <a href=\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":1073,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14,2],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Uniwersalna procedura aktywacyjna Service Brokera - W chmurze o chmurze i nie tylko<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uniwersalna procedura aktywacyjna Service Brokera - W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"og:description\" content=\"Us\u0142uga Service Brokera, kt\u00f3ra pojawi\u0142a si\u0119 wraz z wersja 2005 zadziwia mnie do tej pory. Od wielu lat producent niewiele w niej zmienia, co mo\u017ce \u015bwiadczy\u0107 o dobrze przemy\u015blanej architekturze. Z drugiej strony monitoring tej us\u0142ugi dostarczony przez producenta pozostawia &hellip; Continued\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\" \/>\n<meta property=\"og:site_name\" content=\"W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-24T21:19:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-18T12:50:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2018\/04\/sql-glass.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"467\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"djkormo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"djkormo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\"},\"author\":{\"name\":\"djkormo\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"headline\":\"Uniwersalna procedura aktywacyjna Service Brokera\",\"datePublished\":\"2018-04-24T21:19:45+00:00\",\"dateModified\":\"2019-08-18T12:50:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\"},\"wordCount\":474,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"articleSection\":[\"implementacja\",\"t-sql\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\",\"url\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\",\"name\":\"Uniwersalna procedura aktywacyjna Service Brokera - W chmurze o chmurze i nie tylko\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/#website\"},\"datePublished\":\"2018-04-24T21:19:45+00:00\",\"dateModified\":\"2019-08-18T12:50:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wchmurze.cloud\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Uniwersalna procedura aktywacyjna Service Brokera\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wchmurze.cloud\/#website\",\"url\":\"https:\/\/wchmurze.cloud\/\",\"name\":\"W chmurze o chmurze i nie tylko\",\"description\":\"W chmurze o chmurze i nie tylko\",\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wchmurze.cloud\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\",\"name\":\"djkormo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"caption\":\"djkormo\"},\"logo\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Uniwersalna procedura aktywacyjna Service Brokera - W chmurze o chmurze i nie tylko","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/","og_locale":"pl_PL","og_type":"article","og_title":"Uniwersalna procedura aktywacyjna Service Brokera - W chmurze o chmurze i nie tylko","og_description":"Us\u0142uga Service Brokera, kt\u00f3ra pojawi\u0142a si\u0119 wraz z wersja 2005 zadziwia mnie do tej pory. Od wielu lat producent niewiele w niej zmienia, co mo\u017ce \u015bwiadczy\u0107 o dobrze przemy\u015blanej architekturze. Z drugiej strony monitoring tej us\u0142ugi dostarczony przez producenta pozostawia &hellip; Continued","og_url":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/","og_site_name":"W chmurze o chmurze i nie tylko","article_published_time":"2018-04-24T21:19:45+00:00","article_modified_time":"2019-08-18T12:50:38+00:00","og_image":[{"width":700,"height":467,"url":"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2018\/04\/sql-glass.jpg","type":"image\/jpeg"}],"author":"djkormo","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"djkormo","Szacowany czas czytania":"4 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#article","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/"},"author":{"name":"djkormo","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"headline":"Uniwersalna procedura aktywacyjna Service Brokera","datePublished":"2018-04-24T21:19:45+00:00","dateModified":"2019-08-18T12:50:38+00:00","mainEntityOfPage":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/"},"wordCount":474,"commentCount":0,"publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"articleSection":["implementacja","t-sql"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/","url":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/","name":"Uniwersalna procedura aktywacyjna Service Brokera - W chmurze o chmurze i nie tylko","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/#website"},"datePublished":"2018-04-24T21:19:45+00:00","dateModified":"2019-08-18T12:50:38+00:00","breadcrumb":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/04\/24\/uniwersalna-procedura-aktywacyjna-service-brokera\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wchmurze.cloud\/"},{"@type":"ListItem","position":2,"name":"Uniwersalna procedura aktywacyjna Service Brokera"}]},{"@type":"WebSite","@id":"https:\/\/wchmurze.cloud\/#website","url":"https:\/\/wchmurze.cloud\/","name":"W chmurze o chmurze i nie tylko","description":"W chmurze o chmurze i nie tylko","publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wchmurze.cloud\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":["Person","Organization"],"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323","name":"djkormo","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","caption":"djkormo"},"logo":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/"},"url":"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/"}]}},"_links":{"self":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/363"}],"collection":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/comments?post=363"}],"version-history":[{"count":43,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/363\/revisions"}],"predecessor-version":[{"id":586,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/363\/revisions\/586"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media\/1073"}],"wp:attachment":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media?parent=363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/categories?post=363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/tags?post=363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}