Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
ded-mazay
Member

Откуда:
Сообщений: 260
Доброго времени!
Версию ОС и СУБД на сервере с MS сказать не могу, т.к. он на другой стороне..
Собсно есть XML интерфейс для обмена между нашими серверами, у нас Linux, Oracle, апач, на 2-й стороне IIS, соот-но предположил MSSQL.
Собсно не могу протолкнуть сгенерированный на PHP guid удаленному серверу:
POST /TrackingExchangeSoap.asmx HTTP/1.1
бла..бла..

<?xml version="1.0" encoding="UTF-8"?>
.......бла бла..
<PartRecord>
<uid>4438bb0c-ec60-9a35-6c91-d89f3ff5c68a</uid>
.......

Получаю
HTTP/1.1 100 Continue

HTTP/1.1 500 Internal Server Error
бла бла....
<?xml version="1.0" encoding="utf-8"?>
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: Server was unable to read request. ---&gt; System.InvalidOperationException: There is an error in XML document (49, 25). ---&gt; System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
   at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException)
   at System.Guid.TryParseGuidWithNoStyle(String guidString, GuidResult&amp; result)
   at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult&amp; result)
   at System.Guid..ctor(String g)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read5_NullableOfGuid(Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read9_PartRecord(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read10_TrackingRecord(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read39_SaveOrder()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer32.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
   at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()</faultstring>
<detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>


Генерирую так:

function genGuid ($str) {
	if($str) {
		$hash = hash('ripemd160', $str);
		$guid = substr($hash,  0,  8).'-'.substr($hash,  8,  4).'-'.substr($hash, 12,  4).'-'.substr($hash, 16,  4).'-'.substr($hash, 20, 12);
		return $guid;
	} else {
		return false;
	}
}

Непойму мб ему не просто шестнадцатиричный формат надо подсунуть, а так вроде нормальный грид получается (4438bb0c-ec60-9a35-6c91-d89f3ff5c68a)
3 май 14, 15:38    [15966567]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Разбирайтесь с промежуточным ПО. Приведенная ошибка к MSSQL не относится.
3 май 14, 15:52    [15966596]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
Guid-uid
Guest
invm,

а не в этом?

<uid>4438bb0c-ec60-9a35-6c91-d89f3ff5c68a</uid>

Guid should contain 32 digits with 4 dashes
4 май 14, 00:20    [15967991]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
_лень_логиниться
Guest
ded-mazay,

имхо, надо убрать тире из php-функции, генерящей гуиды/
4 май 14, 05:47    [15968490]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
ded-mazay
Генерирую так:

function genGuid ($str) {
	if($str) {
		$hash = hash('ripemd160', $str);
		$guid = substr($hash,  0,  8).'-'.substr($hash,  8,  4).'-'.substr($hash, 12,  4).'-'.substr($hash, 16,  4).'-'.substr($hash, 20, 12);
		return $guid;
	} else {
		return false;
	}
}

Непойму мб ему не просто шестнадцатиричный формат надо подсунуть, а так вроде нормальный грид получается (4438bb0c-ec60-9a35-6c91-d89f3ff5c68a)
Например, мне тоже не так, чтобы "совсем понятно", как в функции "return false" коррелирует с "return $guid"... Преобразование BOOL в GUID по какому правилу выполняется?
4 май 14, 12:04    [15968783]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
странный гуид. в третьей группе первым символом должна быть четверка
4 май 14, 19:35    [15970022]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Lepsik, не обязательно. Но обычно псевдо-генераторы (V4) так делают.
Вот возьмите GUID MAC адресов (V1), там 1.
А если взять NewSequentialID() так вообще совсем по другому.
4 май 14, 21:14    [15970325]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Mnior
Lepsik, не обязательно. Но обычно псевдо-генераторы (V4) так делают.
Вот возьмите GUID MAC адресов (V1), там 1.
А если взять NewSequentialID() так вообще совсем по другому.
Вот тут выяснили, что там стоит номер версии: Тайна NEWID()
4 май 14, 21:32    [15970375]     Ответить | Цитировать Сообщить модератору
 Re: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Судя по педивикии, там не менее 2х символов задействовано: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
M -- version: 1, 2, 3, 4, 5 (4 bits)
N -- variant: 8, 9, A, B (1-3 bits)

Но в UniqueIdentifier можно преобразовать любой набор, независимо от спецификации.
5 май 14, 12:59    [15973159]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить