Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 44

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

   <s:element name="DoSomething" >

    <s:complexType>

     <s:sequence>

      <s:element name="stringParam" nullable="true" type="s:string" />

      <s:element name="intParam" nullable="true" type="s:int" />

     </s:sequence>

    </s:complexType>

   </s:element>

   <s:element name="DoSomethingResponse">

    <s:complexType>

     <s:sequence>

      <s:element name="DoSomethingResult" type="s:int" />

     </s:sequence>

    </s:complexType>

   </s:element>

   <s:element name="int" type="s:int" />

  </s:schema>

 </types>

 ... Π΄Ρ€ΡƒΠ³ΠΈΠ΅ опрСдСлСния ...

</definitions>

ВсС, Ρ‡Ρ‚ΠΎ трСбуСтся для запросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² SOAP ΠΈ HTTP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅, опрСдСляСтся этими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π»Π΅Π΅ Π² этом Ρ„Π°ΠΉΠ»Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ опСрациями. ВсС Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартного синтаксиса схСмы XML, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

<s:element name="DoSomethingResponse">

 <s:complexType>

  <s:sequence>

   <s:element name="DoSomethingResult" type="s:int" />

  </s:sequence>

 </s:complexType>

</s:element>

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ опрСдСляСт, Ρ‡Ρ‚ΠΎ элСмСнт с ΠΈΠΌΠ΅Π½Π΅ΠΌ <DoSomethingResponse> ΠΈΠΌΠ΅Π΅Ρ‚ элСмСнт-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ с ΠΈΠΌΠ΅Π½Π΅ΠΌ <DoSomethingResult>, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ†Π΅Π»ΠΎΠ΅ число.

Если ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ WSDL для слуТбы Web, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Как ΠΌΡ‹ скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, это Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ознакомились с SOAP ΠΈ WSDL, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ слуТбы Web.

Π‘Π»ΡƒΠΆΠ±Ρ‹ Web

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ слуТб Web Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° вопроса:

β–‘ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ слуТб Web, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ связано с написаниСм слуТб Web ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ… Π½Π° сСрвСрах Web.

β–‘ ИспользованиС слуТб Web, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ связано с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° созданных слуТб.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ слуТб Web

Π‘Π»ΡƒΠΆΠ±Ρ‹ Web ΡΠΎΠ·Π΄Π°ΡŽΡ‚, Π»ΠΈΠ±ΠΎ помСщая ΠΊΠΎΠ΄ прямо Π² Ρ„Π°ΠΉΠ»Ρ‹ .asmx, Π»ΠΈΠ±ΠΎ, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° классы слуТбы Web ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ². Как ΠΈ со страницами ASP.NET, созданиС слуТбы Web Π² VS.NET примСняСт послСдний ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΈ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ†Π΅Π»Π΅ΠΉ дСмонстрации.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° слуТбы Web, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ PCSWebSrv1, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚, ΠΊΠ°ΠΊ ΠΈ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° прилоТСния Web, ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌΡƒ мноТСству созданных Ρ„Π°ΠΉΠ»ΠΎΠ². ЀактичСски, СдинствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вмСсто создания Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ WebForm1.aspx создаСтся Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Service1.asmx. Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .vsdisco ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ слуТбы Web, Ρ‡Ρ‚ΠΎΠ±Ρ‹ систСма Visual Studio .NET, ΠΊΠ°ΠΊ ΠΌΡ‹ вскорС ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΌΠΎΠ³Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ ссылку Web.

Код Π² Service1.asmx Π½Π΅ доступСн нСпосрСдствСнно Ρ‡Π΅Ρ€Π΅Π· VS.NET, Π½ΠΎ просмотр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Notepad ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку ΠΊΠΎΠ΄Π°:

<%@ WebService Language="c#" Codebehind="Service1.asmx.cs" Class="PCSWebSrv1.Service1" %>

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ссылаСтся Π½Π° Ρ„Π°ΠΉΠ» ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² VS.NET, β€” Service1.asmx.cs, доступный ΠΏΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° Service1.asmx Π² Solution Explorer ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ View Code. Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ для краткости коммСнтариями ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅:

namespace PCSWebSrv1 {

 using system;

 using System.Collections;

 using System.ComponentModel;

 using System.Data;

 using System.Diagnostics;

 using System.Web;

 using System.Web.Services;


 public class Service1 : System.Web.Services.WebService {

  public Service1() {

   InitializeComponent();

  }


  private void InitializeComponent() {

  }


  public override void Dispose() {

  }

 }

}

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ опрСдСляСт пространство ΠΈΠΌΠ΅Π½ PCSWebSrv1 с нСсколькими ссылками Π½Π° стандартныС пространства ΠΈΠΌΠ΅Π½ ΠΈ класс слуТбы Web с ΠΈΠΌΠ΅Π½Π΅ΠΌ Service1 (ссылку Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅ Π² Ρ„Π°ΠΉΠ»Π΅ Service1.asmx), ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΎΡ‚ System.Web.Services.WebService. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для этого класса слуТбы Web.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, доступного Ρ‡Π΅Ρ€Π΅Π· слуТбу Web, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ простого опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠ°ΠΊ public ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ для Π½Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° WebMethod. Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступными. ВскорС ΠΌΡ‹ рассмотрим Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ ΠΏΠΎΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

[WebMethod]

public String CanWeFixIt() {

 return "Yes we can!";

}

ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄.

МоТно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, направляя Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Web Π½Π° Ρ„Π°ΠΉΠ» Service1.asmx:

Π©Π΅Π»Ρ‡ΠΎΠΊ Π½Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° прСдоставляСт Π½Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ запросС ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π΅ SOAP, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ запрос ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² HTTP GET ΠΈ HTTP POST. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, наТимая Π½Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Invoke (Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ простых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ввСсти Π² этой Ρ„ΠΎΡ€ΠΌΠ΅). Если ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ΄ XML, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

<?xml version="1.0" ?>

<string xmlns="http://tempuri.org/">Yes we can!</string>

Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ прСкрасно.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ссылкС Service Description, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½Π° экранС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π²Ρ‹ΡˆΠ΅, позволяСт ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ описаниС WSDL слуТбы Web. НаиболСС Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΊ Π½Π°ΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, являСтся описаниС Ρ‚ΠΈΠΏΠΎΠ² элСмСнтов для запросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²:

<types>

 <s:schema attributeFormDefault="qualified" elementFormPefault="qualified"

  targetNamespace="http://tempuri.org/">

  <s:element name="CanWeFixIt">

   <s:complexType />

  </s:element>

  <s:element name="CanWeFixItResponse">

   <s:complexType>

    <s:sequence>

     <s:element name="CanWeFixItResult" nullable="true" type="s:string" />

    </s:sequence>

   </s:complexType>

  </s:element>

  <s:element name="string" nullable="true" type="s:string" />

 </s:schema>

</types>

Π­Ρ‚ΠΎ описаниС содСрТит Ρ‚Π°ΠΊΠΆΠ΅ описаниС Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… для запросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… соСдинСний для слуТбы, дСлая Π΅Π³ΠΎ достаточно Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ.

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, доступныС для слуТб Web

Π‘Π»ΡƒΠΆΠ±Ρ‹ Web ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΎΠ±ΠΌΠ΅Π½Π° Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…:

String           Char    Byte

Boolean          Int16   Int32

Int64            UInt16  UInt32

UInt64           Single  Double

Guid             Decimal DateTime

XmlQualifiedName class   struct

XmlNode          DataSet

ΠœΠ°ΡΡΠΈΠ²Ρ‹ всСх ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ допустимы. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ свойства ΠΈ поля Ρ‚ΠΈΠΏΠΎΠ² class ΠΈ struct.

ИспользованиС слуТб Web

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слуТбы Web, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ класс прокси, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ слуТбой Web. Π›ΡŽΠ±Ρ‹Π΅ обращСния ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΊ слуТбС Web Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· этот прокси, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ слуТбС Web, создавая Π² ΠΊΠΎΠ΄Π΅ иллюзию, Ρ‡Ρ‚ΠΎ имССтся локальная копия слуТбы Web. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сущСствуСт большой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ HTTP, Π½ΠΎ ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° способа. МоТно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки WSDL.exe, Π»ΠΈΠ±ΠΎ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ мСню Add Web Reference Π² VS.NET.

ΠŸΡ€ΠΈ использовании ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ WSDL.exe создаСтся Ρ„Π°ΠΉΠ» .cs, содСрТащий класс прокси Π½Π° основС описания WSDL слуТбы Web. ΠœΡ‹ опрСдСляСм это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ URL, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

WSDL http://localhost/PCSWebSrv1/Service1.asmx?WSDL

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· послСднСго Ρ€Π°Π·Π΄Π΅Π»Π° эта ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° создаст Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Service1.cs класса прокси. Класс называСтся ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ cΠ»ΡƒΠΆΠ±Ρ‹ Web, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Service1, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ Π½Π°Π·Π²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ слуТбы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот класс, ΠΌΡ‹ просто добавляСм Ρ„Π°ΠΉΠ» .cs, созданный для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Service1 myService = new Service1();

String result = myService.CanWeFixIt();

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ созданный класс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½, поэтому Π½Π΅ Π½ΡƒΠΆΠ΅Π½ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ using, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для использования Π΄Ρ€ΡƒΠ³ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки /n<namespace> ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ WSDL.exe.

Π­Ρ‚Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Ссли слуТба разрабатываСтся ΠΈ постоянно измСняСтся. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ созданный прокси ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ компиляциСй, Π½ΠΎ сущСствуСт способ Π»ΡƒΡ‡ΡˆΠ΅.

ΠœΡ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Web с ΠΈΠΌΠ΅Π½Π΅ΠΌ PCSWebClient1, создавая ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· послСднСго Ρ€Π°Π·Π΄Π΅Π»Π°. Π’ Ρ‚Π΅Π»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° созданной страницС .aspx Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ объявлСниС form Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

<form method="post" runat="server">

 <asp:Label Runat="server" ID="resultLabel" />

 <br>

 <asp:Button Runat="server" ID="triggerButton" Text="Invoke CanWeFixIt()" />