【发布时间】:2010-06-30 19:25:59
【问题描述】:
我需要通过 .Net Web 服务获取存储在 sql server 数据库中的 1000 个 XML 文件,以便从 iPhone 调用?请建议在 .net 网络服务中处理它的更好方法?
【问题讨论】:
标签: .net web-services soap
我需要通过 .Net Web 服务获取存储在 sql server 数据库中的 1000 个 XML 文件,以便从 iPhone 调用?请建议在 .net 网络服务中处理它的更好方法?
【问题讨论】:
标签: .net web-services soap
听起来你正在编写一个 iPhone 应用程序?
您不需要为此使用 SOAP Web 服务。您没有指定客户端在请求时是否知道数千个 xml 文件的列表。此答案假定客户端明确知道该列表。
客户
找到允许 iPhone 应用程序从 HTTP 资源读取 XML 的现有模块或代码。您将访问像 http://foo.com/bar/GetFile.ashx?file=1.xml 这样的 URL
能够以 XML 格式读取响应的内容。对要下载到手机的每个 xml 文件重复此调用。
服务器
设置一个 Web 应用程序来处理文件请求。 创建一个新的 .ashx Web 处理程序类来侦听和处理对 xml 文件的请求。 下面是一个说明服务器端的简单示例:
public class GetFile : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpResponse r = context.Response;
r.ContentType = "text/xml";
string requestedFile = context.Request.QueryString["file"];
//ensure you check that the value received on the querystring is valid.
string xmlFromDatabase = MyDataLayer.GetXmlByFileName(requestedFile);
//pump the XML back to the caller
r.Write(xmlFromDatabase);
}
public bool IsReusable{get{return false;}}
}
所有文件在运行时不可用
如果您的客户端不知道文件的名称,只需在该处理程序上创建一个新方法。它可以发布它能够提供的可用 xml 文件的列表。
http://foo.com/bar/ListFiles.ashx
public class ListFiles : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpResponse r = context.Response;
r.ContentType = "text/plain";
//grab a listing of all the files from the database
var listFiles = MyDataLayer.GetAllXmlFilesAvailable();
foreach (var file in listFile)
{
r.Write(file + "|");
}
}
public bool IsReusable{get{return false;}}
}
【讨论】: