Создание экземпляра DataContract в javascript при использовании службы WCF с ScriptService

У меня есть простой сервис WCF, который я выставляю с помощью .svc. Служба имеет несколько связанных классов DataContract, которые используются с ServiceContracts. При вызове метода, который получает некоторые данные, возвращаемый json имеет все свойства, как и следовало ожидать.

Мой вопрос заключается в том, как я могу получить новый экземпляр одного из этих объектов DataContract в JavaScript.

<asp:ScriptManager ID="ScriptManager1" runat="server">
  <Services>
    <asp:ServiceReference 
      Path="./Service1.svc" />
  </Services>
</asp:ScriptManager>

<script>
// what I'd like to be able to do in javascript
var myInstance = new MyNamespace.MyDataContractClassName();
myInstance.someProperty = "Prop Value";
</script>
10.12.2008 23:35:30
2 ОТВЕТА

Если вы перейдете к ./Service1.svc/js, вы увидите точный клиентский прокси-скрипт, который генерируется сервером.

В конце этого файла вы должны увидеть строки, которые регистрируют ваши типы контрактов данных как типы клиентов - это просто делает их доступными в системе типов клиентов и позволяет вам вызывать известный конструктор, но на самом деле он не кодирует их свойства, потому что вы можете установить любые произвольные свойства для любого объекта в JavaScript.

Таким образом, код, который вы фактически написали, является правильным, если предположить, что пространство имен и объявление класса соответствуют тому, что находится в коде прокси, но вы можете проверить это самостоятельно.

1
12.12.2008 03:19:05

Спасибо @Sam, я надеялся, что был способ, которым все свойства могли быть созданы так, чтобы, когда я сделал новый MyDataContractClassname (); У меня мог бы быть хороший законченный объект, который я мог бы обойти, и мне не нужно было проверять наличие свойств и тому подобное - просто относиться к нему как к объекту, который я получил от службы, которая возвращает DataContract. Если, скажем, у меня есть метод, который отображает содержимое этого объекта пользователю, а иногда он показывает новый, а иногда показывает один из службы, было бы неплохо просто предположить, что все свойства там, как вы, если вы экземпляр рукописного "класса"

0
12.12.2008 16:45:45