
1、>
CharacterSet 获取响应的字符集。
ContentEncoding 获取用于对响应体进行编码的方法。
ContentLength 获取请求返回的内容的长度。 (重写 WebResponse::ContentLength。)
ContentType 获取响应的内容类型。 (重写 WebResponse::ContentType。)
Cookies 获取或设置与此响应关联的 Cookie。
Headers 获取来自服务器的与此响应关联的标头。 (重写 WebResponse::Headers。)
IsFromCache 获取一个 Boolean 值,该值指示此响应是否为从缓存中获取的。 (继承自 WebResponse。)
IsMutuallyAuthenticated 获取一个 Boolean 值,该值指示客户端和服务器是否都已经过身份验证。 (重写 WebResponse::IsMutuallyAuthenticated。)
LastModified 获取最后一次修改响应内容的日期和时间。
Method 获取用于返回响应的方法。
ProtocolVersion 获取响应中使用的 >
ResponseUri 获取响应请求的 Internet 资源的 URI。 (重写WebResponse::ResponseUri。)
Server 获取发送响应的服务器的名称。
StatusCode 获取响应的状态。
StatusDescription 获取与响应一起返回的状态说明。
使用示例
C# 代码 复制
static void Main(string[] args)
{
>
>
ConsoleWriteLine(responseCharacterSet); //输出 utf-8
ConsoleWriteLine(responseContentEncoding); //空
ConsoleWriteLine(responseContentLength); //输出 10310
ConsoleWriteLine(responseContentType); //输出 text/html charset=utf-8
CookieCollection cc = responseCookies;
ConsoleWriteLine(ccCount); //输出 0
WebHeaderCollection whc = responseHeaders;
ConsoleWriteLine(whcCount); //输出 9
foreach (string h in whcAllKeys)
{
ConsoleWriteLine(hToString() + " " + whc[h]ToString()); //输出所有的响应头信息
}
ConsoleWriteLine(responseIsFromCache); //输出 false 该值指示响应是否从缓存获取的
ConsoleWriteLine(responseIsMutuallyAuthenticated); //输出 false 客户端和服务器端都已通过身份认证
ConsoleWriteLine(responseLastModified); //输出 2013-04-06 21:03:06 最后一次修改响应的时间和日期
ConsoleWriteLine(responseMethod); //输出 Get 返回响应的方法
ConsoleWriteLine(responseProtocolVersion); //输出 11 响应的>
ConsoleWriteLine(responseResponseUri); //输出 >
ConsoleWriteLine(responseServer); //输出 BWS/10 发送响应的服务器的名称
ConsoleWriteLine(responseStatusCode); //输出 OK 获取响应的状态,这个不是状态码,而是状态描述,为什么不是200呢,奇怪啊,测试了好几个网站都是OK,而不是200
ConsoleWriteLine(responseStatusDescription); //输出 OK 这个是状态描述,
ConsoleReadKey();
}
2、>
Close 关闭响应流。 (重写 WebResponse::Close()()()。)
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
Dispose 释放由 >
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
GetObjectData 基础结构。 使用将目标对象序列化所需的数据填充 SerializationInfo。 (重写 WebResponse::GetObjectData(SerializationInfo, StreamingContext)。)
GetResponseHeader 获取与响应一起返回的标头的内容。
GetResponseStream 获取流,该流用于读取来自服务器的响应的体。 (重写 WebResponse::GetResponseStream()()()。)
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
/// <summary>
/// 提供数据批量处理的方法。
/// </summary>
public interface IBatcherProvider : IProviderService
{
/// <summary>
/// 将 <see cref="DataTable"/> 的数据批量插入到数据库中。
/// </summary>
/// <param name="dataTable">要批量插入的 <see cref="DataTable"/>。</param>
/// <param name="batchSize">每批次写入的数据量。</param>
void Insert(DataTable dataTable, int batchSize = 10000);
}
一、SqlServer数据批量插入
SqlServer的批量插入很简单,使用SqlBulkCopy就可以,以下是该类的实现:
/// <summary>
/// 为 SystemDataSqlClient 提供的用于批量 *** 作的方法。
/// </summary>
public sealed class MsSqlBatcher : IBatcherProvider
{
/// <summary>
/// 获取或设置提供者服务的上下文。
/// </summary>
public ServiceContext ServiceContext { get; set; }
/// <summary>
/// 将 <see cref="DataTable"/> 的数据批量插入到数据库中。
/// </summary>
/// <param name="dataTable">要批量插入的 <see cref="DataTable"/>。</param>
/// <param name="batchSize">每批次写入的数据量。</param>
public void Insert(DataTable dataTable, int batchSize = 10000)
{
CheckerArgumentNull(dataTable, "dataTable");
if (dataTableRowsCount == 0)
{
return;
}
using (var connection = (SqlConnection)ServiceContextDatabaseCreateConnection())
{
try
{
connectionTryOpen();
//给表名加上前后导符
var tableName = DbUtilityFormatByQuote(ServiceContextDatabaseProviderGetService<ISyntaxProvider>(), dataTableTableName);
using (var bulk = new SqlBulkCopy(connection, SqlBulkCopyOptionsKeepIdentity, null)
{
DestinationTableName = tableName,
BatchSize = batchSize
})
{
//循环所有列,为bulk添加映射
dataTableEachColumn(c => bulkColumnMappingsAdd(cColumnName, cColumnName), c => !cAutoIncrement);
bulkWriteToServer(dataTable);
bulkClose();
}
}
catch (Exception exp)
{
throw new BatcherException(exp);
}
finally
{
connectionTryClose();
}
}
}
}
SqlBulkCopy的ColumnMappings中列的名称受大小写敏感限制,因此在构造DataTable的时候应请注意列名要与表一致。
以上没有使用事务,使用事务在性能上会有一定的影响,如果要使用事务,可以设置SqlBulkCopyOptionsUseInternalTransaction。
二、Oracle数据批量插入
SystemDataOracleClient不支持批量插入,因此只能使用OracleDataAccess组件来作为提供者。
/// <summary>
/// OracleDataAccess 组件提供的用于批量 *** 作的方法。
/// </summary>
public sealed class OracleAccessBatcher : IBatcherProvider
{
/// <summary>
/// 获取或设置提供者服务的上下文。
/// </summary>
public ServiceContext ServiceContext { get; set; }
/// <summary>
/// 将 <see cref="DataTable"/> 的数据批量插入到数据库中。
/// </summary>
/// <param name="dataTable">要批量插入的 <see cref="DataTable"/>。</param>
/// <param name="batchSize">每批次写入的数据量。</param>
public void Insert(DataTable dataTable, int batchSize = 10000)
{
CheckerArgumentNull(dataTable, "dataTable");
if (dataTableRowsCount == 0)
{
return;
}
using (var connection = ServiceContextDatabaseCreateConnection())
{
try
{
connectionTryOpen();
using (var command = ServiceContextDatabaseProviderDbProviderFactoryCreateCommand())
{
if (command == null)
{
throw new BatcherException(new ArgumentException("command"));
}
commandConnection = connection;
commandCommandText = GenerateInserSql(ServiceContextDatabase, command, dataTable);
commandExecuteNonQuery();
}
}
catch (Exception exp)
{
throw new BatcherException(exp);
}
finally
{
connectionTryClose();
}
}
}
/// <summary>
/// 生成插入数据的sql语句。
/// </summary>
/// <param name="database"></param>
/// <param name="command"></param>
/// <param name="table"></param>
/// <returns></returns>
private string GenerateInserSql(IDatabase database, DbCommand command, DataTable table)
{
var names = new StringBuilder();
var values = new StringBuilder();
//将一个DataTable的数据转换为数组的数组
var data = tableToArray();
//设置ArrayBindCount属性
commandGetType()GetProperty("ArrayBindCount")SetValue(command, tableRowsCount, null);
var syntax = databaseProviderGetService<ISyntaxProvider>();
for (var i = 0; i < tableColumnsCount; i++)
{
var column = tableColumns[i];
var parameter = databaseProviderDbProviderFactoryCreateParameter();
if (parameter == null)
{
continue;
}
parameterParameterName = columnColumnName;
parameterDirection = ParameterDirectionInput;
parameterDbType = columnDataTypeGetDbType();
parameterValue = data[i];
if (namesLength > 0)
{
namesAppend(",");
valuesAppend(",");
}
namesAppendFormat("{0}", DbUtilityFormatByQuote(syntax, columnColumnName));
valuesAppendFormat("{0}{1}", syntaxParameterPrefix, columnColumnName);
commandParametersAdd(parameter);
}
return stringFormat("INSERT INTO {0}({1}) VALUES ({2})", DbUtilityFormatByQuote(syntax, tableTableName), names, values);
}
}
以上最重要的一步,就是将DataTable转为数组的数组表示,即object[][],前数组的上标是列的个数,后数组是行的个数,因此循环Columns将后数组作为Parameter的值,也就是说,参数的值是一个数组。而insert语句与一般的插入语句没有什么不一样。
从响应消息中检索内容
客户端使用onMessage方法检索消息内容。客户端通过消息得到envelope,再通过envelope得到body,从而访问SOAPBody对象。访问SOAPBody对象是因为内容存放在该元素中。为了检索由NodeaddTextNode方法添加的内容,请调用NodegetValue方法。GetValue返回调用元素的直接子元素的值。为了访问bodyElement,需要在body上调用getChildElement方法。以下代码演示了如何从响应消息中检索内容。
public SOAPMessage onMessage(SOAPMessage message)
{
SOAPEnvelop env = msggetSOAPPart()getEnvelope();
env getBody()
addChildElement(envcreateName("Response"))
addTextNode("This is a Response");
return msg;
}
想要从含有附件的消息中检索内容,你需要访问附件。没有参数的情况下,SOAPMessagegetAttachments方法返回指向所有AttachmentPart对象的javautilIterator对象。以下代码打印出了SOAPMessage对象消息中每一个AttachmentPart对象的内容。
javautilIterator it = messagegetAttachments();
while (ithasNext()) {
AttachmentPart attachment = (AttachmentPart)itnext();
Object content = attachmentgetContent();
String id = attachmentgetContentId();
Systemoutprint("Attachment " + id + " contains: " + content);
Systemoutprintln("");
}
访问消息的附件部分
当收到带有附件的消息或是希望改变消息附件的时候,都需要访问消息的附件。没有附加信息的SOAPMesssagegetAttachments方法返回指向消息中所有AttachmentPart对象的javautilIterator对象。以下代码演示了如何访问附件从而获得SOAPMessage对象消息中每个AttachmentPart对象的内容。
javautilIterator it = msggetAttachments();
while (ithasNext()) {
AttachmentPart ap = itnext();
Object content = apgetContent();
String id = apgetContentId();
Systemoutprint("Attachment " + id + " contains: " + content);
Systemoutprintln("");
}
组装并部署SOAP客户端
>
以上就是关于“response”对象设置响应头属性方法是什么全部的内容,包括:“response”对象设置响应头属性方法是什么、出现service provider response status error怎么解决、求助,如何获取WEB服务响应回来的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)