Это определенно ошибка в генерации кода Visual Studio / Web-сервиса. Вот мое объяснение того, что, по моему мнению, происходит и как исправить это обойти это.
В NAV (или любых других веб-службах), где существует объект с нечетким именем, в данном случае "Document_Type"
, очевидно, что сборка выходит из строя при компиляции.Например, у меня может быть три отдельных объекта WSDL, которые все определяют тип документа.Например,
CustomerSale.wsdl
WebSale.wsdl
VendorSale.wsdl
Когда код Visual Studio генерирует объект, он проходит через каждый из моих объектов WSDL, находит Document_Type и соответственно перечисляет.например,
CustomerSale.Document_Type -> Document_Type1
WebSale.Document_Type -> Document_Type2
VendorSale.Document_Type -> Document_Type3
Однако, когда сеть компилирует объекты, объекты выходят из строя.например,
CustomerSale.Document_Type -> Document_Type1
WebSale.Document_Type -> Document_Type3
VendorSale.Document_Type -> Document_Type2
Я не уверен, зависит ли это от алфавитного порядка объектов или какой-либо другой переменной, но это определенно происходит.
Я не вижу рифмы или причиныони будут не синхронизированы, но простое решение (в моем случае) состоит в том, чтобы просто удалить объект WSDL, что приведет к путанице с компилятором.В любом случае мне это не нужно.
Чтобы выяснить во время выполнения, какой объект вызывал путаницу в компиляторе, я отразил тип:
Response.Write(WebSale.Document_Type.GetType().ToString);
Response.End();
Затем я перешел к определению, вв этом случае Document_Type2 и увидел, что это определенно не тот же объект.Затем я удалил объект из своих веб-сервисов и web.config - и перекомпилировал.Мой веб-объект сразу превратился в Document_Type2!Это все прояснило и позволило сайту скомпилироваться в реальном браузере.Теперь они были синхронизированы.
Однако я понимаю, что не у всех есть объекты, которые они могут удалить, поскольку они могут использовать эти объекты.Другим обходным решением будет динамическое задание объекта с помощью отражения.Вместо привязки вашего типа объекта к `Document_Type2 'вы можете вместо этого отразить тип и привести при необходимости.например,
//Document type will throw error at run time.
//comment.Document_Type = DynamicsNAV.Document_Type3.Order; <-- removed.
// I don't care what the name of the object is,
// I know that it contains Order.
var prop = comment.GetType().GetProperty("Document_Type");
prop.SetValue(comment, Enum.Parse(prop.PropertyType, "Order"), null);
Я надеюсь, что это решение поможет другим, кто испытывает ту же проблему!