Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вызов метода WCF сервиса (вопрос из экзамена 70-562) / 3 сообщений из 3, страница 1 из 1
28.06.2010, 18:09
    #36711855
pusrg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода WCF сервиса (вопрос из экзамена 70-562)
Добрый день.

Помогите разобраться с вызовом метода WCF сервиса с помощью XmlReader.

Готовлюсь сдавать сертификацию 70-562 и в Braindumps обнаружил вопрос по WCF сервису:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
You create a Microsoft ASP.NET application by using the Microsoft .NET Framework version  3 . 5 .
You create a Microsoft Windows Communication Foundation (WCF) service that exposes the following service contract. (Line numbers are included for reference only.) 
 01  [ServiceContract] 
 02  public interface IBlogService 
 03  { 
 04  [OperationContract] 
 05  [WebGet(ResponseFormat=WebMessageFormat.Xml)] 
 06  Rss20FeedFormatter GetBlog(); 
 07  } 
You configure the WCF service to use the WebHttpBinding class, and to be exposed at the following URL:
http://www.contoso.com/BlogService 
You need to store the result of the GetBlog operation in an XmlDocument variable named xmlBlog in a Web form.
Which code segment should you use?

Answers:
A:
string url = @"http: //www.contoso.com/BlogService/GetBlog"; 
XmlReader blogReader = XmlReader.Create(url); 
xmlBlog.Load(blogReader);

B:
string url = @"http: //www.contoso.com/BlogService"; 
XmlReader blogReader = XmlReader.Create(url); 
xmlBlog.Load(blogReader);

C:
Uri blogUri = new Uri(@"http: //www.contoso.com/BlogService"); 
ChannelFactory<IBlogService> blogFactory = new ChannelFactory<IBlogService>(blogUri); 
IBlogService blogSrv = blogFactory.CreateChannel(); 
Rss20FeedFormatter feed = blogSrv.GetBlog(); 
xmlBlog.LoadXml(feed.ToString());

D:
Uri blogUri = new Uri(@"http: //www.contoso.com/BlogService/GetBlog"); 
ChannelFactory<IBlogService> blogFactory = new ChannelFactory<IBlogService>(blogUri); 
IBlogService blogSrv = blogFactory.CreateChannel(); 
Rss20FeedFormatter feed = blogSrv.GetBlog(); 
xmlBlog.LoadXml(feed.Feed.ToString());

Судя по Braindumps, правильный ответ - А.

Я, к сожалению не имел практического опыта по WCF сервисам, в порядке подготовки прочитал несколько статей на MSDN и раздел в Training Kit.
Также создал тестовый сервер и тестовый клиент для него.

Результат моих изысканий следующий:
Ближе всего к корректному, ответ С, нужно только в конструктор ChannelFactory<IBlogService>(), вместо объекта blogUri, передать корректное название EndPoint из web.config сервиса (или вызвать другой корректный конструктор для ChannelFactory<IBlogService>). После этого пример прекрасно работает, веб метод возвращает нужный результат.

При использовании варианта А, я получаю исключение "System.Net.WebException: Удаленный сервер возвратил ошибку: (400) Недопустимый запрос." в строке
Код: plaintext
1.
XmlReader blogReader = XmlReader.Create(url);
Я пытался играться с свойствами атрибута WebGet, конкретно устанавливал UriTemplate="/GetBlog", но это к сожалению не помогло...

Помогите разобраться:
то ли это ошибка в Braindumps, то ли из за недостатка знаний я не могу корректно вызвать нужный метод веб сервиса.
Буду очень благодарен, если вышлите ссылки на документацию, о именно таком способе вызова метода веб сервиса (из варианта А).

С уважением,
Заранее спасибо за ответ и потраченное время.
...
Рейтинг: 0 / 0
29.06.2010, 12:53
    #36712978
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода WCF сервиса (вопрос из экзамена 70-562)
pusrg,

тут ответ D.
...
Рейтинг: 0 / 0
29.06.2010, 12:58
    #36713003
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов метода WCF сервиса (вопрос из экзамена 70-562)
Код: plaintext
1.
2.
3.
4.
        Dim epAddress As New EndpointAddress("http://192.168.0.3:8000/Service/Login")
        Dim binding As BasicHttpBinding = New BasicHttpBinding()
        Dim channelFactory As IChannelFactory(Of IHandShake) = New ChannelFactory(Of IHandShake)(binding)
        Dim proxy As IHandShake = channelFactory.CreateChannel(epAddress)
        MsgBox(proxy.SendLoginQuest(New LoginRequest("md5 key")))

вот тебе пример рабочего кода.

либо А либо Д.
так как адрес точки должен быть указан до последней буквы.
http: //www.contoso.com/BlogService/GetBlog вот такой токо прокатит.
а xmlreader не подойдет,так как у него перегрузки по методу create токо для файлов на диске и потоков.
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вызов метода WCF сервиса (вопрос из экзамена 70-562) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]