Листинг C#-кодов для образца библиотеки классов SOAP-заголовка SQL
Примечание. |
---|
Инструкции для включения следующего кода образца библиотеки в проект Visual Studio представлены в разделе Добавление SOAP-заголовков в клиентские приложения. |
using System;
using System.Web;
using System.Web.Services;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace SqlSoapHeader
{
/// <summary>
/// This is a sample implementation of the SQL 2005 Security SOAP Header in the SOAP 1.1 format.
/// This class inherites from SoapHeader as all SOAP Header classes need to do.
/// This class also implements the IXmlSerializable so the client can control the XML serialization format.
/// This class is meant to be used as a SOAP header only.
/// </summary>
[XmlRoot("Security", Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
public class Security : System.Web.Services.Protocols.SoapHeader, System.Xml.Serialization.IXmlSerializable
{
// private member variables to hold the user input values.
private String WssePassword;
private String SqlOldPassword;
private String WsseUsername;
// the set of string const that is required for serialization.
private const String strxmlns = "xmlns";
private const String strsqlns = "https://schemas.microsoft.com/sqlserver/2004/SOAP";
private const String strwssens = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
private const String strsql = "sql";
private const String strwsse = "wsse";
private const String strUsernameToken = "UsernameToken";
private const String strUsername = "Username";
private const String strPassword = "Password";
private const String strType = "Type";
private const String strPasswordText = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText";
private const String strOldPassword = "OldPassword";
public Security()
{
// setting default values
this.WssePassword = null;
this.SqlOldPassword = null;
this.WsseUsername = null;
}
// IXmlSerializable methods
public XmlSchema GetSchema()
{
// Visual Studio .NET 2003 requires an ID value for the XmlSchema
// This is the minimum implementation required for this method.
// Note: this method is not really used anywhere.
XmlSchema _xmlSchema = new XmlSchema();
_xmlSchema.Id = "Sql 2005";
return _xmlSchema;
}
public void ReadXml(XmlReader reader)
{
// not implemented
}
public void WriteXml(XmlWriter writer)
{
// The SOAP header serialization context to passed to this method after the class name element
// node has been opened (ie. WriteStartElement("Security"))
// Writing additional attributes to the "Security" element
// xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
// xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
writer.WriteAttributeString(strxmlns, strwsse, null, strwssens);
writer.WriteAttributeString(strxmlns, strwssens);
// check for SOAP header specific attributes
if (this.MustUnderstand)
{
writer.WriteAttributeString("mustUnderstand", "https://schemas.xmlsoap.org/soap/envelope/", this.EncodedMustUnderstand);
}
if ((null != this.Actor) && ("" != this.Actor))
{
writer.WriteAttributeString("actor", "https://schemas.xmlsoap.org/soap/envelope/", this.Actor);
}
// <wsse:UsernameToken>
writer.WriteStartElement(strwsse, strUsernameToken, strwssens);
// <wsse:Username></wsse:Username>
writer.WriteStartElement(strwsse, strUsername, strwssens);
if (null == this.WsseUsername)
writer.WriteAttributeString("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance", "true");
else
writer.WriteString(this.WsseUsername);
writer.WriteEndElement();
// <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"></wsse:Password>
writer.WriteStartElement(strwsse, strPassword, strwssens);
writer.WriteAttributeString(strType, strPasswordText);
if (null == this.WssePassword)
writer.WriteAttributeString("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance", "true");
else
writer.WriteString(this.WssePassword);
writer.WriteEndElement();
// xmlns:sql="https://schemas.microsoft.com/sqlserver/2004/SOAP"
// <sql:OldPassword Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass-word1</sql:OldPassword>
if (null != this.SqlOldPassword)
{
writer.WriteStartElement(strsql, strOldPassword, strsqlns);
writer.WriteAttributeString(strxmlns, strsql, null, strsqlns);
writer.WriteAttributeString(strType, strPasswordText);
writer.WriteString(this.SqlOldPassword);
writer.WriteEndElement();
}
//</wsse:UsernameToken>
writer.WriteEndElement();
}
// Property accessors
public String Password
{
get
{
return this.WssePassword;
}
set
{
this.WssePassword = value;
}
}
public String OldPassword
{
get
{
return this.SqlOldPassword;
}
set
{
this.SqlOldPassword = value;
}
}
public String Username
{
get
{
return this.WsseUsername;
}
set
{
this.WsseUsername = value;
}
}
} // end of public class Security
/// <summary>
/// This is a sample implementation of the SQL 2005 initialDatabase SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class initialDatabase : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string value;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
[System.ComponentModel.DefaultValueAttribute(false)]
public bool optional = false;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string filename;
} // end of public class initialDatabase
/// <summary>
/// This is a sample implementation of the SQL 2005 initialLanguage SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class initialLanguage : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string value;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
[System.ComponentModel.DefaultValueAttribute(false)]
public bool optional = false;
} // end of public class initialLanguage
/// <summary>
/// This is a sample implementation of the SQL 2005 environmentChangeNotifications SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class environmentChangeNotifications : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
[System.ComponentModel.DefaultValueAttribute(false)]
public bool databaseChange = false;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
[System.ComponentModel.DefaultValueAttribute(false)]
public bool languageChange = false;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
[System.ComponentModel.DefaultValueAttribute(false)]
public bool transactionBoundary = false;
} // end of public class environmentChangeNotifications
/// <summary>
/// This is a sample implementation of the SQL 2005 applicationName SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class applicationName : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string value;
} // end of public class applicationName
/// <summary>
/// This is a sample implementation of the SQL 2005 hostName SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class hostName : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string value;
} // end of public class hostName
/// <summary>
/// This is a sample implementation of the SQL 2005 clientPID SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class clientPID : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public long value;
} // end of public class clientPID
/// <summary>
/// This is a sample implementation of the SQL 2005 clientNetworkID SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class clientNetworkID : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "base64Binary")]
public System.Byte[] value;
} // end of public class clientNetworkID
/// <summary>
/// This is a sample implementation of the SQL 2005 clientInterface SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class clientInterface : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string value;
} // end of public class clientInterface
/// <summary>
/// This is a sample implementation of the SQL 2005 notificationRequest SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class notificationRequest : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string notificationId;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string deliveryService;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
public string timeout;
} // end of public class notificationRequest
/// <summary>
/// This is a sample implementation of the SQL 2005 sqlSession SQL options SOAP Header.
/// This sample code is generated by taking the schema definition from the WSDL and running through the
/// .NET Frameworks SDK "xsd.exe" tool.
/// </summary>
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://schemas.microsoft.com/sqlserver/2004/SOAP/Options", IsNullable = false)]
public class sqlSession : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
[System.ComponentModel.DefaultValueAttribute(false)]
public bool initiate = false;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
[System.ComponentModel.DefaultValueAttribute(false)]
public bool terminate = false;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "base64Binary")]
public System.Byte[] sessionId;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public int timeout;
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool timeoutSpecified;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "base64Binary")]
public System.Byte[] transactionDescriptor;
} // end of public class sqlSession
}
См. также
Справочник
Разработка клиентского приложения в среде Visual Studio 2005
Добавление заголовков SOAP в клиентские приложения