Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Si desea enlazar un control de Windows Forms a los resultados obtenidos al llamar a un servicio web XML, puede usar un BindingSource componente. Este procedimiento es similar al enlace de un BindingSource componente a un tipo. Debe crear un proxy del lado cliente que contenga los métodos y tipos expuestos por el servicio web. Se genera un proxy del lado cliente desde el propio servicio web (.asmx) o su archivo de lenguaje de descripción de servicios web (WSDL). Además, el proxy del lado cliente debe exponer los campos de tipos complejos utilizados por el servicio web como propiedades públicas. A continuación, se enlaza BindingSource a uno de los tipos expuestos en el proxy del servicio web.
Para crear y enlazar a un proxy del lado cliente
Cree un formulario Windows Forms en el directorio que prefiera, con un espacio de nombres adecuado.
Agregue un BindingSource componente al formulario.
Abra la ventana de comandos del SDK de desarrollo de software de Windows y navegue al mismo directorio en el que se encuentra el formulario.
Con la herramienta WSDL, escriba
wsdly la dirección URL del archivo .asmx o WSDL para el servicio web, seguido del espacio de nombres de la aplicación y, opcionalmente, el idioma en el que trabaja.En el ejemplo de código siguiente se usa el servicio web ubicado en
http://webservices.eraserver.net/zipcoderesolver/zipcoderesolver.asmx. Por ejemplo, para el tipowsdl http://webservices.eraserver.net.zipcoderesolver/zipcoderesolver.asmx /n:BindToWebServicede C# o para el tipowsdl http://webservices.eraserver.net.zipcoderesolver/zipcoderesolver.asmx /n:BindToWebService /language:VBde Visual Basic. Al pasar la ruta de acceso como argumento a la herramienta WSDL, se generará un proxy del lado cliente en el mismo directorio y espacio de nombres que la aplicación, en el idioma especificado. Si usa Visual Studio, agregue el archivo al proyecto.Seleccione un tipo en el proxy del lado cliente al que se va a enlazar.
Normalmente, se trata de un tipo devuelto por un método ofrecido por el servicio web. Los campos del tipo elegido deben exponerse como propiedades públicas con fines de vinculación.
[System::SerializableAttribute, System::Xml::Serialization::XmlTypeAttribute( Namespace="http://webservices.eraserver.net/")] public ref class USPSAddress { private: String^ streetField; String^ cityField; String^ stateField; String^ shortZIPField; String^ fullZIPField; public: property String^ Street { String^ get() { return this->streetField; } void set( String^ value ) { this->streetField = value; } } property String^ City { String^ get() { return this->cityField; } void set( String^ value ) { this->cityField = value; } } property String^ State { String^ get() { return this->stateField; } void set( String^ value ) { this->stateField = value; } } property String^ ShortZIP { String^ get() { return this->shortZIPField; } void set( String^ value ) { this->shortZIPField = value; } } property String^ FullZIP { String^ get() { return this->fullZIPField; } void set( String^ value ) { this->fullZIPField = value; } } };[System.SerializableAttribute, System.Xml.Serialization.XmlTypeAttribute( Namespace="http://webservices.eraserver.net/")] public class USPSAddress { private string streetField; private string cityField; private string stateField; private string shortZIPField; private string fullZIPField; public string Street { get { return this.streetField; } set { this.streetField = value; } } public string City { get { return this.cityField; } set { this.cityField = value; } } public string State { get { return this.stateField; } set { this.stateField = value; } } public string ShortZIP { get { return this.shortZIPField; } set { this.shortZIPField = value; } } public string FullZIP { get { return this.fullZIPField; } set { this.fullZIPField = value; } } }<System.SerializableAttribute(), _ System.Xml.Serialization.XmlTypeAttribute( _ [Namespace]:="http://webservices.eraserver.net/")> _ Public Class USPSAddress Private streetField As String Private cityField As String Private stateField As String Private shortZIPField As String Private fullZIPField As String Public Property Street() As String Get Return Me.streetField End Get Set(ByVal value As String) Me.streetField = value End Set End Property Public Property City() As String Get Return Me.cityField End Get Set(ByVal value As String) Me.cityField = value End Set End Property Public Property State() As String Get Return Me.stateField End Get Set(ByVal value As String) Me.stateField = value End Set End Property Public Property ShortZIP() As String Get Return Me.shortZIPField End Get Set(ByVal value As String) Me.shortZIPField = value End Set End Property Public Property FullZIP() As String Get Return Me.fullZIPField End Get Set(ByVal value As String) Me.fullZIPField = value End Set End Property End ClassEstablezca la propiedad DataSource del BindingSource al tipo que desee que esté contenido en el proxy del lado cliente del servicio web.
BindingSource1->DataSource = USPSAddress::typeid;BindingSource1.DataSource = typeof(USPSAddress);BindingSource1.DataSource = GetType(USPSAddress)
Para enlazar los controles al BindingSource, que está enlazado a un servicio web.
Enlaza los controles al BindingSource, pasando como parámetro la propiedad pública del tipo de servicio web que deseas.
textBox1->DataBindings->Add("Text", this->BindingSource1, "FullZIP", true);textBox1.DataBindings.Add("Text", this.BindingSource1, "FullZIP", true);textBox1.DataBindings.Add("Text", Me.BindingSource1, "FullZIP", True)
Ejemplo
En el ejemplo de código siguiente se muestra cómo enlazar un BindingSource componente a un servicio web y, a continuación, cómo enlazar un cuadro de texto al BindingSource componente. Al hacer clic en el botón, se llama a un método de servicio web y los resultados aparecerán en textbox1.
#using <System.Windows.Forms.dll>
#using <System.dll>
#using <System.Drawing.dll>
#using <System.Web.Services.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::Collections::Generic;
using namespace System::ComponentModel;
using namespace System::Drawing;
using namespace System::Windows::Forms;
namespace BindToWebService {
[System::SerializableAttribute, System::Xml::Serialization::XmlTypeAttribute(
Namespace="http://webservices.eraserver.net/")]
public ref class USPSAddress
{
private:
String^ streetField;
String^ cityField;
String^ stateField;
String^ shortZIPField;
String^ fullZIPField;
public:
property String^ Street
{
String^ get()
{
return this->streetField;
}
void set( String^ value )
{
this->streetField = value;
}
}
property String^ City
{
String^ get()
{
return this->cityField;
}
void set( String^ value )
{
this->cityField = value;
}
}
property String^ State
{
String^ get()
{
return this->stateField;
}
void set( String^ value )
{
this->stateField = value;
}
}
property String^ ShortZIP
{
String^ get()
{
return this->shortZIPField;
}
void set( String^ value )
{
this->shortZIPField = value;
}
}
property String^ FullZIP
{
String^ get()
{
return this->fullZIPField;
}
void set( String^ value )
{
this->fullZIPField = value;
}
}
};
[System::Web::Services::WebServiceBindingAttribute(Name="ZipCodeResolverSoap",
Namespace="http://webservices.eraserver.net/")]
public ref class ZipCodeResolver:
public System::Web::Services::Protocols::SoapHttpClientProtocol
{
public:
ZipCodeResolver() : SoapHttpClientProtocol()
{
this->Url =
"http://webservices.eraserver.net/zipcoderesolver/zipcoderesolver.asmx";
}
//''<remarks/>
[System::Web::Services::Protocols::SoapDocumentMethodAttribute
("http://webservices.eraserver.net/CorrectedAddressXml",
RequestNamespace="http://webservices.eraserver.net/",
ResponseNamespace="http://webservices.eraserver.net/",
Use=System::Web::Services::Description::SoapBindingUse::Literal,
ParameterStyle=System::Web::Services::Protocols::SoapParameterStyle::Wrapped)]
USPSAddress^ CorrectedAddressXml(String^ accessCode,
String^ address, String^ city, String^ state)
{
array<Object^>^ results = this->Invoke("CorrectedAddressXml",
gcnew array<Object^>{accessCode, address, city, state});
return ((USPSAddress^) results[0]);
}
//''<remarks/>
System::IAsyncResult^ BeginCorrectedAddressXml(String^ accessCode,
String^ address, String^ city, String^ state,
System::AsyncCallback^ callback, Object^ asyncState)
{
return this->BeginInvoke("CorrectedAddressXml",
gcnew array<Object^>{accessCode, address, city, state}, callback, asyncState);
}
USPSAddress^ EndCorrectedAddressXml(System::IAsyncResult^ asyncResult)
{
array<Object^>^ results = this->EndInvoke(asyncResult);
return ((USPSAddress^) results[0]);
}
};
ref class Form1: public Form
{
public:
[STAThread]
static void Main()
{
Application::EnableVisualStyles();
Application::Run(gcnew Form1());
}
private:
BindingSource^ BindingSource1;
TextBox^ textBox1;
TextBox^ textBox2;
Button^ button1;
public:
Form1()
{
this->Load += gcnew EventHandler(this, &Form1::Form1_Load);
textBox1->Location = System::Drawing::Point(118, 131);
textBox1->ReadOnly = true;
button1->Location = System::Drawing::Point(133, 60);
button1->Click += gcnew EventHandler(this, &Form1::button1_Click);
button1->Text = "Get zipcode";
ClientSize = System::Drawing::Size(292, 266);
Controls->Add(this->button1);
Controls->Add(this->textBox1);
BindingSource1 = gcnew BindingSource();
textBox1 = gcnew TextBox();
textBox2 = gcnew TextBox();
button1 = gcnew Button();
}
private:
void button1_Click(Object^ sender, EventArgs^ e)
{
textBox1->Text = "Calling Web service..";
ZipCodeResolver^ resolver = gcnew ZipCodeResolver();
BindingSource1->Add(resolver->CorrectedAddressXml("0",
"One Microsoft Way", "Redmond", "WA"));
}
public:
void Form1_Load(Object^ sender, EventArgs^ e)
{
BindingSource1->DataSource = USPSAddress::typeid;
textBox1->DataBindings->Add("Text", this->BindingSource1, "FullZIP", true);
}
};
public ref class CorrectedAddressXmlCompletedEventArgs:
public System::ComponentModel::AsyncCompletedEventArgs
{
private:
array<Object^>^ results;
internal:
CorrectedAddressXmlCompletedEventArgs(array<Object^>^ results,
System::Exception^ exception, bool cancelled, Object^ userState) :
AsyncCompletedEventArgs(exception, cancelled, userState)
{
this->results = results;
}
public:
property USPSAddress^ Result
{
USPSAddress^ get()
{
this->RaiseExceptionIfNecessary();
return ((USPSAddress^) this->results[0]);
}
}
delegate void CorrectedAddressXmlCompletedEventHandler(Object^ sender,
CorrectedAddressXmlCompletedEventArgs^ args);
};
}
int main()
{
BindToWebService::Form1::Main();
return 1;
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace BindToWebService {
class Form1: Form
{
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
private BindingSource BindingSource1 = new BindingSource();
private TextBox textBox1 = new TextBox();
private TextBox textBox2 = new TextBox();
private Button button1 = new Button();
public Form1()
{
this.Load += new EventHandler(Form1_Load);
textBox1.Location = new System.Drawing.Point(118, 131);
textBox1.ReadOnly = true;
button1.Location = new System.Drawing.Point(133, 60);
button1.Click += new EventHandler(button1_Click);
button1.Text = "Get zipcode";
ClientSize = new System.Drawing.Size(292, 266);
Controls.Add(this.button1);
Controls.Add(this.textBox1);
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "Calling Web service..";
ZipCodeResolver resolver = new ZipCodeResolver();
BindingSource1.Add(resolver.CorrectedAddressXml("0",
"One Microsoft Way", "Redmond", "WA"));
}
public void Form1_Load(object sender, EventArgs e)
{
BindingSource1.DataSource = typeof(USPSAddress);
textBox1.DataBindings.Add("Text", this.BindingSource1, "FullZIP", true);
}
}
[System.Web.Services.WebServiceBindingAttribute(Name="ZipCodeResolverSoap",
Namespace="http://webservices.eraserver.net/")]
public class ZipCodeResolver:
System.Web.Services.Protocols.SoapHttpClientProtocol
{
public ZipCodeResolver() : base()
{
this.Url =
"http://webservices.eraserver.net/zipcoderesolver/zipcoderesolver.asmx";
}
//''<remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute
("http://webservices.eraserver.net/CorrectedAddressXml",
RequestNamespace="http://webservices.eraserver.net/",
ResponseNamespace="http://webservices.eraserver.net/",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public USPSAddress CorrectedAddressXml(string accessCode,
string address, string city, string state)
{
object[] results = this.Invoke("CorrectedAddressXml",
new object[]{accessCode, address, city, state});
return ((USPSAddress) results[0]);
}
//''<remarks/>
public System.IAsyncResult BeginCorrectedAddressXml(string accessCode,
string address, string city, string state,
System.AsyncCallback callback, object asyncState)
{
return this.BeginInvoke("CorrectedAddressXml",
new object[]{accessCode, address, city, state}, callback, asyncState);
}
public USPSAddress EndCorrectedAddressXml(System.IAsyncResult asyncResult)
{
object[] results = this.EndInvoke(asyncResult);
return ((USPSAddress) results[0]);
}
}
[System.SerializableAttribute, System.Xml.Serialization.XmlTypeAttribute(
Namespace="http://webservices.eraserver.net/")]
public class USPSAddress
{
private string streetField;
private string cityField;
private string stateField;
private string shortZIPField;
private string fullZIPField;
public string Street
{
get
{
return this.streetField;
}
set
{
this.streetField = value;
}
}
public string City
{
get
{
return this.cityField;
}
set
{
this.cityField = value;
}
}
public string State
{
get
{
return this.stateField;
}
set
{
this.stateField = value;
}
}
public string ShortZIP
{
get
{
return this.shortZIPField;
}
set
{
this.shortZIPField = value;
}
}
public string FullZIP
{
get
{
return this.fullZIPField;
}
set
{
this.fullZIPField = value;
}
}
}
public delegate void CorrectedAddressXmlCompletedEventHandler(object sender,
CorrectedAddressXmlCompletedEventArgs args);
public class CorrectedAddressXmlCompletedEventArgs:
System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
internal CorrectedAddressXmlCompletedEventArgs(object[] results,
System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
public USPSAddress Result
{
get
{
this.RaiseExceptionIfNecessary();
return ((USPSAddress) this.results[0]);
}
}
}
}
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Namespace BindToWebService
Class Form1
Inherits Form
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
Private BindingSource1 As New BindingSource()
Private textBox1 As New TextBox()
Private textBox2 As New TextBox()
Private WithEvents button1 As New Button()
Public Sub New()
textBox1.Location = New System.Drawing.Point(118, 131)
textBox1.ReadOnly = True
button1.Location = New System.Drawing.Point(133, 60)
button1.Text = "Get zipcode"
ClientSize = New System.Drawing.Size(292, 266)
Controls.Add(Me.button1)
Controls.Add(Me.textBox1)
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles button1.Click
textBox1.Text = "Calling Web service.."
Dim resolver As New ZipCodeResolver()
BindingSource1.Add(resolver.CorrectedAddressXml("0", "One Microsoft Way", "Redmond", "WA"))
End Sub
Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
BindingSource1.DataSource = GetType(USPSAddress)
textBox1.DataBindings.Add("Text", Me.BindingSource1, "FullZIP", True)
End Sub
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Web.Services.WebServiceBindingAttribute(Name:="ZipCodeResolverSoap", _
[Namespace]:="http://webservices.eraserver.net/")> _
Public Class ZipCodeResolver
Inherits System.Web.Services.Protocols.SoapHttpClientProtocol
Private CorrectedAddressXmlOperationCompleted As _
System.Threading.SendOrPostCallback
Public Sub New()
MyBase.New()
Me.Url = _
"http://webservices.eraserver.net/zipcoderesolver/zipcoderesolver.asmx"
End Sub
Public Event CorrectedAddressXmlCompleted As _
CorrectedAddressXmlCompletedEventHandler
<System.Web.Services.Protocols.SoapDocumentMethodAttribute( _
"http://webservices.eraserver.net/CorrectedAddressXml", _
RequestNamespace:="http://webservices.eraserver.net/", _
ResponseNamespace:="http://webservices.eraserver.net/", _
Use:=System.Web.Services.Description.SoapBindingUse.Literal, _
ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _
Public Function CorrectedAddressXml(ByVal accessCode As String, _
ByVal address As String, ByVal city As String, ByVal state As String) _
As USPSAddress
Dim results() As Object = Me.Invoke("CorrectedAddressXml", _
New Object() {accessCode, address, city, state})
Return CType(results(0), USPSAddress)
End Function
'''<remarks/>
Public Function BeginCorrectedAddressXml(ByVal accessCode As String, _
ByVal address As String, ByVal city As String, ByVal state As String, _
ByVal callback As System.AsyncCallback, ByVal asyncState As Object) _
As System.IAsyncResult
Return Me.BeginInvoke("CorrectedAddressXml", _
New Object() {accessCode, address, city, state}, callback, asyncState)
End Function
Public Function EndCorrectedAddressXml(ByVal asyncResult _
As System.IAsyncResult) As USPSAddress
Dim results() As Object = Me.EndInvoke(asyncResult)
Return CType(results(0), USPSAddress)
End Function
End Class
<System.SerializableAttribute(), _
System.Xml.Serialization.XmlTypeAttribute( _
[Namespace]:="http://webservices.eraserver.net/")> _
Public Class USPSAddress
Private streetField As String
Private cityField As String
Private stateField As String
Private shortZIPField As String
Private fullZIPField As String
Public Property Street() As String
Get
Return Me.streetField
End Get
Set(ByVal value As String)
Me.streetField = value
End Set
End Property
Public Property City() As String
Get
Return Me.cityField
End Get
Set(ByVal value As String)
Me.cityField = value
End Set
End Property
Public Property State() As String
Get
Return Me.stateField
End Get
Set(ByVal value As String)
Me.stateField = value
End Set
End Property
Public Property ShortZIP() As String
Get
Return Me.shortZIPField
End Get
Set(ByVal value As String)
Me.shortZIPField = value
End Set
End Property
Public Property FullZIP() As String
Get
Return Me.fullZIPField
End Get
Set(ByVal value As String)
Me.fullZIPField = value
End Set
End Property
End Class
Public Delegate Sub CorrectedAddressXmlCompletedEventHandler(ByVal sender As Object, _
ByVal args As CorrectedAddressXmlCompletedEventArgs)
Public Class CorrectedAddressXmlCompletedEventArgs
Inherits System.ComponentModel.AsyncCompletedEventArgs
Private results() As Object
Friend Sub New(ByVal results() As Object, ByVal exception As System.Exception, _
ByVal cancelled As Boolean, ByVal userState As Object)
MyBase.New(exception, cancelled, userState)
Me.results = results
End Sub
Public ReadOnly Property Result() As USPSAddress
Get
Me.RaiseExceptionIfNecessary()
Return CType(Me.results(0), USPSAddress)
End Get
End Property
End Class
End Namespace
Compilar el código
Este es un ejemplo completo que incluye un Main método y una versión abreviada del código proxy del lado cliente.
Este ejemplo requiere:
- Referencias a los ensamblados System, System.Drawing, System.Web.Services, System.Windows.Forms y System.Xml.
Consulte también
.NET Desktop feedback