Welcome to MSDN Blogs Sign in | Join | Help

Авто подстройка адреса в апплете Silverlight, который вызывает веб сервис с своего сайта.

Я думал что это боян, но меня спросили об этом уже два раза – так что решил написать в блог.

Итак, задача

Дано – есть силверлайт приложение ну или там компонент, в котором используется wcf сервис с того же самого сайта, откуда мы грузим силверлайт приложение (знакомый сценарий, не правда ли).

Мы не знаем URL на котором окажется наше приложение.

Мы при разработке делаем Add Sevrice Reference, получаем ссылку на localhost, в промышленном исполнении получается ссылка не правильная.

ЧТО ДЕЛАТЬ?????!

Решения.

1) Теоретически можно открыть xap файл, это же zip! (и поменять настройку в ServiceReferences.ClientConfig)

2) опишу тут кратко, весь сценарий подробно позже.

нужно при инициализации ServiceClient поменять ему строчку адреса, получив адрес из системы Silverlight, например так

Code Snippet
  1.             service = new ServiceReference1.Service1Client();
  2.             var host = App.Current.Host;
  3.             var newAddress = string.Format("http://{0}:{1}/Service1.svc",
  4.                     host.Source.Host, host.Source.Port);
  5.             service.Endpoint.Address =
  6.                 new EndpointAddress(newAddress
  7.                     );

нужно помнить, что config файл не является финальной настройкой, и всегда можно поправить что то в коде.

Подробности

Что я сделал.

1) создал silverlight приложение (file\new project)

Capture01

Capture02

2) В сайт добавил (правая  кнопка на веб сайте, add New item) WCF сервис.

Capture03

3) переписал сервис чтобы он что то возвращал

Code Snippet
  1.         [OperationContract]
  2.         public string DoWork()
  3.         {
  4.             return DateTime.Now.ToString(); ;
  5.         }

3) В силверлайт клиента добавил Add Service Reference

Capture03_1

4) написал простое silverlight приложение, которое содержит кнопку, по нажатию на кнопку вызывает сервис. В начале сервис динамически  инициализируется

Code Snippet
  1.     public partial class MainPage : UserControl
  2.     {
  3.         ServiceReference1.Service1Client service;
  4.         public MainPage()
  5.         {
  6.             service = new ServiceReference1.Service1Client();
  7.             var host = App.Current.Host;
  8.             var newAddress = string.Format("http://{0}:{1}/Service1.svc",
  9.                     host.Source.Host, host.Source.Port);
  10.             service.Endpoint.Address =
  11.                 new EndpointAddress(newAddress
  12.                     );
  13.             service.DoWorkCompleted += new EventHandler<ServiceReference1.DoWorkCompletedEventArgs>(service_DoWorkCompleted);
  14.             InitializeComponent();
  15.         }
  16.         private void button1_Click(object sender, RoutedEventArgs e)
  17.         {
  18.             service.DoWorkAsync();
  19.         }
  20.         void service_DoWorkCompleted(object sender, ServiceReference1.DoWorkCompletedEventArgs e)
  21.         {
  22.             label1.Content = e.Result;
  23.         }
  24.         private void UserControl_Loaded(object sender, RoutedEventArgs e)
  25.         {
  26.             label2.Content = service.Endpoint.Address.ToString();
  27.         }
  28.     }

5) все! можно отправлять куда хотите и приложение само подстроит ссылки на веб сервисы. Я для тестирования менял порт в веб сайте без обновления service reference – все работало.

 код прилагается.

Интервью с Дмитрием Никоновым

На прошлой неделе проездом в Киеве был мега человек Дмитрий Никонов, бывший Program Manager в Microsoft , а ныне Sr. Technical Program Manager, Media Management, Amazon.

Он любезно согласился дать небольшое интервью Виктору Шатохину на разные темы, которое в итоге растянулось на час.

Смотрим!

http://dev.net.ua/blogs/shatokhin/archive/2009/12/09/9105.aspx

Как установить виджет на Windows Mobile 6.5 устройство

 

Как известно, если Вы создаете виджет, то его можно поставить на эмулятор, но нельзя поставить на физическое устройство.

Вопрос изначально задали в докладе на techdays

http://www.techdays.ru/videos/1561.html

Как выяснилось, решение это проблемы описано в MSDN.

http://msdn.microsoft.com/en-us/library/dd721906.aspx#DeployingtheWidget

Deploying the Widget

The current version of Windows Mobile widgets supports two deployment modes: SkyMarket and sideload deployment. SkyMarket is an online application store intended to be a one-stop shop for purchasing Windows Mobile applications.

Developers can use sidelong deployment from the desktop development workstation. To do this, the developer copies the widget deployment file to the device and then runs the widget file on the device. This deployment method works out of the box for the emulator image, but for actual devices the developer must add the following registry keys to the registry of the device.

[HKEY_CLASSES_ROOT\riapp]
    "EditFlags"=dword:00010000
[HKEY_CLASSES_ROOT\riapp\Shell\Open\Command]
    @="wmwidgetinstaller.exe %1"

Александр Яхнин (Alex Yakhnin) в России!

Александр Яхнин, статьи которого мы неоднократно переводили в русском блоге windows mobile, сегодня ( 8 декабря) будет выступать на юзер группе в Санкт Петербурге.

Ссылка на регистрацию тут

http://sp.ineta.ru/Events/EventOneSessionInfo.aspx?Id=bb2b31de-59c7-4b98-8b03-7b37998818b9

 

Не упустите редкую возможность задать вопросы мировому эксперту по Windows Mobile.

Возродим Юзер Группу в Нижнем Новгороде?

Коллеги

Тут

http://nnov.ineta.ru/

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

Приходит на юзер группу!

Заявки на то, чтобы стать лидером, принимаются.

i-maratb@microsoft.com, как обычно .

 

Спасибо!

Платформа 2010

Вот и подошла к концу конференция Платформа 2010, или #msplatforma, как ее называют в твиттере.

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

Я из разных источников слышал, что на сайте с оценкой докладов нельзя было указать текстовый комментарий – почему Вам понравился или не понравился тот или иной доклад. Поскольку мне очень хочется понять результаты , я предлагаю написать мне в произвольной форме Ваши впечатления от трека для разработчиков (доклады или лабораторные работы помеченные синеньким треком DT). Пожалуйста, напишите мне письмо с темой platforma 2010 feedback, укажите название доклада и укажите что Вы про него (доклад и докладчика) думаете.  Мой адрес i-maratb@microsoft.com.

Особенно интересно мнение тех, кому что-то не понравилось. Не обещаю ответить, но обещаю все прочитать и учесть.

Спасибо!

Платформа 2010

Вот и подошла к концу конференция Платформа 2010, или #msplatforma, как ее называют в твиттере.

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

Я из разных источников слышал, что на сайте с оценкой докладов нельзя было указать текстовый комментарий – почему Вам понравился или не понравился тот или иной доклад. Поскольку мне очень хочется понять результаты , я предлагаю написать мне в произвольной форме Ваши впечатления от трека для разработчиков (доклады или лабораторные работы помеченные синеньким треком DT). Пожалуйста, напишите мне письмо с темой platforma 2010 feedback, укажите название доклада и укажите что Вы про него (доклад и докладчика) думаете.

Особенно интересно мнение тех, кому что-то не понравилось. Не обещаю ответить, но обещаю все прочитать и учесть.

Спасибо!

Posted by Marat Bakirov [MSFT] | 0 Comments
Filed under:

Куда надо сходить на платформе.

 

Решил прорекламировать свой трек для разработчиков.

Во первых, хочу отметить, что кроме докладов нам удалось поставить две лабораторные работы.  Одна посвящена очень интересной технологии Dublin, и вести ее будет Наталья Ефимцева. Что такое Dublin в двух словах – это вещь для itpro, позволяющая управлять огромным количествов работающих workflow сервисов. Все это для .net 4. Однозначно рекомендую!

Вторую работу изготовил собственноручно Виталий Дильмухаметов. В этой работе он покажет как написать для silverlight так называемые behaviours , а после написания использовать их в Expression Blend и добавлять к вашим интерфейсным элементам на Silverlight. .

Ну и собственно сам трек. В треке 13 докладов (смотрите синенькие теги DT тут http://msplatforma.ru/schedule/default.aspx ). Нам выдали два зала рядом – синий конгресс зал (это один из трех залов в который превращается большой зал пленарного заседания), а также камерный “Желтый Зал”  (на нем еще написано Пресс Зал).

Доклады перечислять долго, назову только ключевые теги и ключевых докладчиков. Дмитрий Васюра, Никита Шамгунов, Алексей Шуленин и целый набор экспертов из нашего  консалтинга (я смотрел их доклад – это просто отпад). WPF, Silverlight, Visual Studio 2010, Team Foundation Server 2010, Sharepoint, SQL Server 2008 R2, ASP.NET, 1C + Sharepoint.

Будет ряд изменений – на круглом столе вместо Ромы Здебского будет Никита Шамгунов, Александр Яхнин приехать не смог (но код прислал), вместо него все буду рассказывать я.

Увидимся завтра и Вы узнаете зачем нам MultiTouch ноутбук!

Фотоальбом с дня 2

http://cid-d00ccb797db4960b.skydrive.live.com/browse.aspx/platforma%202010%20preps%202?ct=photos&sa=84138638

Posted by Marat Bakirov [MSFT] | 0 Comments
Filed under:

Платформа 2010 – фотографии с поля

Коллеги, буду краток.

Для платформы у нас есть MultiTouch ноутбук. Зачем? Аааа.. увидите.

 

 

Сделал несколько фотографий прямо на месте.

 

Это так выглядит сервер, на котором находится большинство виртуальных машин для пленарного доклада.

 

Железки Бари Муртазина.

 

Готовимся

 

Думаем.

 

Все фотографии тут -
Posted by Marat Bakirov [MSFT] | 0 Comments
Filed under:

Платформа – keynote (пленарный доклад) – тонкости подготовки

Так уж получилось, что я готовлю одну из демонстраций на keynote.

Для этого я пытаюсь настроить HP TouchSmart tx2 – тот самый ноутбук с multi touch.

Тонкость в том, что доклад на платформе должен быть very robust. Казалось бы простая демка должны быть продублирована, изолирована и так далее. Что значит продублирована ? значит мы хотим поднять второй ноутбук с копией демонстрации, которая будет использоваться если с первым что то случится.

Что значит изолирована? Пока предполагается , что этих же ноутбуки будут показывать что то Роман и Михаил. Но я собираюсь ставить Visual Studio 2010 Beta 2, а вдруг Михаилу понадобится какой нибудь SDK который как то повлияет на мою демо? Значит Мише  и Роме нужна вторая операционная система.

Решено сделать так.

На ноутбук делает один большой partiton, в котором мы ставим несколько VHD, на каждом будет стоять своя копия windows 7. Под каждую дему – своя. И кстати, это сильно упросит нам процесс копирования демы на второй диск – просто скопируем VHD.

Итак, я поставил Windows примерно так – в процессе установки тут же создал VHD (c:\winmain.vhd), и прямо на него установил Windows. Настроил драйвера для touch, вроде бы работают.

Теперь сделал копию файла winmain.vhd

D:\>copy winmain.vhd pl2010Wpf4.vhd

А сейчас я буду пытаться добавить новую загрузочную запись, чтоб система могла грузиться на выбор с любого VHD.

D:\>bcdedit

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume1
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}
resumeobject            {62620c6d-c343-11de-9ec9-f1812b1fa691}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows 7
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {62620c6f-c343-11de-9ec9-f1812b1fa691}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {62620c6d-c343-11de-9ec9-f1812b1fa691}
nx                      OptIn

D:\>

Попробуем скопировать загрузочную запись.

D:\>bcdedit /copy {current} /d "pl2010Wpf4"
The entry was successfully copied to {62620c72-c343-11de-9ec9-f1812b1fa691}.

 

Windows Boot Loader
-------------------
identifier              {62620c72-c343-11de-9ec9-f1812b1fa691}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             pl2010Wpf4
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {62620c6f-c343-11de-9ec9-f1812b1fa691}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {62620c6d-c343-11de-9ec9-f1812b1fa691}
nx                      OptIn

Теперь задача поправить описание

по идее это надо делать так

D:\>bcdedit /set {62620c72-c343-11de-9ec9-f1812b1fa691} device vhd=d:\pl2010Wpf4.vhd
The device is not valid as specified.
Run "bcdedit /?" for command line assistance.
The parameter is incorrect.

D:\>bcdedit /set {62620c72-c343-11de-9ec9-f1812b1fa691} osdevice vhd=d:\pl2010Wpf4.vhd
The device is not valid as specified.
Run "bcdedit /?" for command line assistance.
The parameter is incorrect.

D:\>bcdedit /set {62620c72-c343-11de-9ec9-f1812b1fa691} device vhd=[d]:\pl2010Wpf4.vhd
An error has occurred setting the element data.
The request is not supported.

D:\>
Но почему то это не хочет работать. почему?

После пары дней нашел.

правильный синтаксис такой

D:\>bcdedit /set {62620c72-c343-11de-9ec9-f1812b1fa691} device vhd=[d:]\pl2010Wpf4.vhdAn error has occurred setting the element data.
The operation completed succesfully

Двоеточие должно быть  ВНУТРИ скобок.

(P.S.  пока я этого не понял, я действовал так – экспорт конфигурации в файл, редактирование бинарного файла  hex редактором – жесть в общем ).

P.S.

Ссылки к размышлению

http://technet.microsoft.com/en-us/library/dd799299(WS.10).aspx

http://blogs.msdn.com/cesardelatorre/archive/2009/01/11/windows-7-natively-booting-from-a-vhd-virtual-pc-image-file.aspx

Posted by Marat Bakirov [MSFT] | 0 Comments
Filed under:

Я иду на платформу

Как обычно, организаторы регистрируются последними. Наконец то зарегистрировался!

 

Оказывается на сайте можно сгенерить себе баннер , вот так.

Конференция Платформа 2010

 

А еще меня можно найти поиском, например по городу Екатеринбург

или просто так

http://msplatforma.ru/user/mbakirov.aspx

Увидимя на платформе!

Наткнулся на интересный проект – ADO.NET Sync services + compression

Не секрет, что ADO.Net Sync Services часто потребляет трафик. Мне тут прислали ссылку на проект на codeplex, в котором предлагается готовое решение с добавленными компрессорами на входе и декомпрессорами на выходе. Плюс к тому проект работает на мобильных устройствах!

 

Смотрим

http://synccomm.codeplex.com/

P.S. Японский BurgerKing отмечает выход Windows7 7 –слойным Whopperом.

http://www.burgerkingjapan.co.jp/news/win7.php

Visual studio 2010 traninng kit beta 2

 

Не буду спамить Вас, коллеги, информацией о выходе новой беты Visual Studio, а вот информация о том, что обновился traning kit , может быть полезной.

Очень важный момент – поскольку кит только-только выложили, иногда откуда то из кеша скачивается старая версия (размером 81 мегабайт). Убедитесь что размер скачиваемого файла больше 90 мегабайт!

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=752cb725-969b-4732-a383-ed5740f02e93

подробности тут

http://www.managed-world.com/archive/2009/10/20/visual-studio-2010-beta-2-training-kit-published.aspx

P.S.

куча полезных ссылок.

http://channel9.msdn.com/shows/10-4/10-4-Episode-33-Downloading-and-Installing-Visual-Studio-2010-Beta-2/

Posted by Marat Bakirov [MSFT] | 0 Comments
Filed under:

Сара Форд отрывается

Сара Форд - та самая, переводной блог которой находится в проекте русских блогов,

http://blogs.msdn.com/rusaraford

Честное слово – не знал, что она , оказывается, менеджер проекта http://codeplex.com .

Решила отметить, как я понял, 8 – летие своей работы в Майкрософт, спрыгнув с подохрительно высокой башни. Как я понял, она собиралась в полете кричать “Go CodePlex”!

 

http://www.youtube.com/watch?v=iKvQLb2UKXg 

http://www.youtube.com/watch?v=jcc4KRrZpI0

Posted by Marat Bakirov [MSFT] | 0 Comments
Filed under:

Как я научился выдавать файл clientaccesspolicy.xml без IIS

Недавно один разработчик обратился ко мне и Мише с вопросом.

Суть вопроса такова.

Есть silverlight клиент, есть WCF сервис. Сервис доступен, скажем, по адресу http://localhost:8731/classic с wsHttpBinding или даже basicHttpBinding.

Сервис self hosted -ну то есть без всякого IIS в консольном приложении или сервисе есть код, который запускает сервис. Как то так.

Code Snippet
  1.             ServiceHost sh = new ServiceHost(typeof(Service1));
  2.             sh.Open();
  3.             Console.WriteLine("up and running");
  4.             Console.ReadLine();
  5.             sh.Close();

Ну и есть собственно сервис, в моем примере это IService2 и класс Service1.

Code Snippet
  1. // Classical wsHttpBinding or basicHttpBinding
  2. [ServiceContract]
  3. public interface IService2
  4. {
  5.     [OperationContract]
  6.     int DoAdd(int a, int b);
  7. }
  8. public class Service1 : IService2
  9. {
  10.     public int DoAdd(int a, int b)
  11.     {
  12.         return a + b;
  13.     }
  14. \

Конфиг выглядит примерно так

Code Snippet
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <system.web>
  4.     <compilation debug="true" />
  5.   </system.web>
  6.   <!-- When deploying the service library project, the content of the config file must be added to the host's
  7.   app.config file. System.Configuration does not support config files for libraries. -->
  8.   <system.serviceModel>
  9.     <services>
  10.       <service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
  11.         name="WcfServiceLibrary1.Service1">
  12.         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  13.         <endpoint address="classic" binding="basicHttpBinding" contract="WcfServiceLibrary1.IService2" />
  14.         <host>
  15.           <baseAddresses>
  16.             <add baseAddress="http://localhost:8731/" />
  17.           </baseAddresses>
  18.         </host>
  19.       </service>
  20.     </services>
  21.     <behaviors>
  22.       <serviceBehaviors>
  23.         <behavior name="WcfServiceLibrary1.Service1Behavior">
  24.           <serviceMetadata httpGetEnabled="true" />
  25.           <serviceDebug includeExceptionDetailInFaults="true" />
  26.         </behavior>
  27.       </serviceBehaviors>
  28.     </behaviors>
  29.   </system.serviceModel>
  30. </configuration>

Задача – сделать так чтобы по адресу http://localhost:8731/clientacccesspolicy.xml выдавался нужный нам файл.

Решение

Воспользуемся возможностями .NET 3.5 по работе с REST.

1) Добавим контракт, который будет реализовывать выдачу файла.

Code Snippet
  1.     // This service exposes operations via REST
  2.     [ServiceContract]
  3.     public interface IService1
  4.     {
  5.         [OperationContract]
  6.         [WebGet(UriTemplate = "/clientacccesspolicy.xml")]
  7.         Stream GetClientPolicy();
  8.     }

Обратим внимание на параметр URITemplate – этот параметр описывает, как должен выглядеть WEB запрос.

2) Добавим настройки в конфиг файл. Нам нужно по адресу http://localhost:8731 добавить endpoint с webBinding, а также прописать endpointBehavior. Можно сделать из утилиты WCF Service Configuraiton Editor, можно руками.

Итак, что пришлось добавить.

 

Code Snippet
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <system.serviceModel>
  4.     <services>
  5.       <service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
  6.         name="WcfServiceLibrary1.Service1">
  7.         <endpoint address="" behaviorConfiguration="webHttp" binding="webHttpBinding"
  8.           contract="WcfServiceLibrary1.IService1">
  9.         </endpoint>
  10.          .....
  11.       </service>
  12.     </services>
  13.     <behaviors>
  14.       <endpointBehaviors>
  15.         <behavior name="webHttp">
  16.           <webHttp />
  17.         </behavior>
  18.       </endpointBehaviors>
  19.        ....
  20.       </behaviors>
  21.   </system.serviceModel>
  22. </configuration>

 

Итоговый конфиг

 

Code Snippet
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <system.web>
  4.     <compilation debug="true" />
  5.   </system.web>
  6.   <!-- When deploying the service library project, the content of the config file must be added to the host's
  7.   app.config file. System.Configuration does not support config files for libraries. -->
  8.   <system.serviceModel>
  9.     <services>
  10.       <service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
  11.         name="WcfServiceLibrary1.Service1">
  12.         <endpoint address="" behaviorConfiguration="webHttp" binding="webHttpBinding"
  13.           contract="WcfServiceLibrary1.IService1">
  14.         </endpoint>
  15.         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  16.         <endpoint address="classic" binding="basicHttpBinding" contract="WcfServiceLibrary1.IService2" />
  17.         <host>
  18.           <baseAddresses>
  19.             <add baseAddress="http://localhost:8731/" />
  20.           </baseAddresses>
  21.         </host>
  22.       </service>
  23.     </services>
  24.     <behaviors>
  25.       <endpointBehaviors>
  26.         <behavior name="webHttp">
  27.           <webHttp />
  28.         </behavior>
  29.       </endpointBehaviors>
  30.       <serviceBehaviors>
  31.         <behavior name="WcfServiceLibrary1.Service1Behavior">
  32.           <serviceMetadata httpGetEnabled="true" />
  33.           <serviceDebug includeExceptionDetailInFaults="true" />
  34.         </behavior>
  35.       </serviceBehaviors>
  36.     </behaviors>
  37.   </system.serviceModel>
  38. </configuration>

 

То есть мы сказали WCF, что запросы по адресу http://localhost:8731 обрабатывает webHttpBinding, а по адресу http://localhost:8731/classic – классический binding. (я взял wsHttpBinging, вроде говорят что для silverlight  нужен другой).

3) Осталось написать реализацию. Я положи нужный мне XML в ресурсы, чтобы код не загромождать.

Code Snippet
  1.         public Stream GetClientPolicy()
  2.         {
  3.             byte[] buffer = null;
  4.             using (MemoryStream ms = new MemoryStream())
  5.             {
  6.                 ms.Position = 0;
  7.                 using (StreamWriter sw = new StreamWriter(ms))
  8.                 {
  9.                     sw.WriteLine(Resource1.crossdomainpolicy1);
  10.                 }
  11.                 buffer = ms.GetBuffer();
  12.             }
  13.             WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
  14.             return new MemoryStream(buffer);
  15.         }

Обратим внимание на следующие моменты.

С помощью специального класса WebOperationContext, содержащего настройки специфичные для web запроса и ответа, я настроил правильный тип содержимого.

Второе – я зачем то занимаюсь шаманством с закрытием и открытием потока. Объясняю.

Метод требует возврата ОТКРЫТОГО потока – поток закрывается сам дальше. Но у меня же есть еще и StreamWriter, который я честно пытаюсь закрыть! А он берет и закрывает нижележащий поток (MemoryStream). Подумал я , да и решил закрыть StreamWriter, MemoryStream , а потом открыть заново.

ВСЁ! Не так страшно и сложно.

Итог – у меня есть сервис, который замечательно выдает clientaccesspolicy.xml,  а также работает как обычный сервис.

image

пример кода приложен. 

 Ссылки

ms-help://MS.MSDNQTR.v90.en/wcf_con/html/0283955a-b4ae-458d-ad9e-6fbb6f529e3d.htm

http://msdn.microsoft.com/en-us/library/cc681221(VS.100).aspx

Posted by Marat Bakirov [MSFT] | 0 Comments
Filed under: , ,

Attachment(s): ClientAccessViaWCF.zip
More Posts Next page »
 
Page view tracker