using System.IO;
using System.Net;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Web.Services;
using System.Web.Services.Description;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
using System.Configuration;
namespace webserviceImp
{
public class ImpWebSvr
{
// 1. 使用 WebClient 下载 WSDL 信息。
static WebClient web = new WebClient();
static Stream stream = web.OpenRead(Url());
// 2. 创建和格式化 WSDL 文档。
static ServiceDescription description = ServiceDescription.Read(stream);
// 3. 创建客户端代理代理类。
static ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
public static void GenCs(string FileName )
{
importer.ProtocolName = "Soap"; // 指定访问协议。
importer.Style = ServiceDescriptionImportStyle.Client; // 生成客户端代理。
importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
importer.AddServiceDescription(description, null, null); // 添加 WSDL 文档。
// 4. 使用 CodeDom 编译客户端代理类。
CodeNamespace nmspace = new CodeNamespace(); // 为代理类添加命名空间,缺省为全局空间。
CodeCompileUnit unit = new CodeCompileUnit();
unit.Namespaces.Add(nmspace);
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
// 5. 保存源代码到文件。当然,你也可以直接保存到内存字符串中。
TextWriter writer = File.CreateText(FileName); // 指定你所需的源代码文件名。
provider.GenerateCodeFromCompileUnit(unit, writer, null);
writer.Flush();
writer.Close();
}
public static string Url()
{
string url = "";
try
{
url = ConfigurationManager.AppSettings["url"].ToString();
}
catch
{
}
if (url == "") url = "http://htbhwsy.com:6666/tjweb.webservice/webservice.asmx?WSDL";
return url;
}
}
}
uses
mshtml,activex;//除了这两个以外好像其他的都是系统在添加控件的时候自动加的
procedure TForm1.analyClick(Sender: TObject); //代码写在analy这个button的Click事件里的
var
Doc:IHTMLDocument2;
tmp:ihtmlelement;
cont,result:widestring;
linkadd:string;
V: OleVariant;
VNode: IXMLNode;
vtitle: OleVariant;
i, NodeCount: Integer;
begin
//vnode相当于一个父结点,所有的更新内容都是这个父结点的子结点
vnode:=xmldoc.DocumentElement.ChildNodes['channel'];
//nodecount,channel父结点的子结点,这其中只有nodename为'item'的才是我们要的内容
Nodecount:=vnode.ChildNodes.Count-1;
for i := 0 to NodeCount do
begin
if vnode.ChildNodes[i].NodeName='item' then
begin
//获取标题vtitle和文章链接地址linkadd
vtitle:=vnode.ChildNodes[i].ChildNodes['title'].NodeValue;
linkadd:=vnode.ChildNodes[i].ChildNodes['link'].NodeValue;
break; //这里只做了一个节点的内容获取,主要是为了便于调试,实际代码中可相应调整
end;
end;
//cont用于存放文章对应HTML文件的源代码,idHttp1是TIdHTTP控件
cont:=idHttp1.Get(linkadd);
//这下面是在做widestring向IHtmlDocument2的“转换”
result:=cont;
if cont = '' then Exit;
CoInitialize(nil);
doc := CoHTMLdocument_create as IHtmlDocument2;
try
V := VarArrayCreate([0, 0], varVariant);
V[0] := result;
Doc.Write(PSafeArray(TVarData(v).VArray));
Doc.Close;
tmp:=doc.all.item('content',varEmpty) as ihtmlelement;
if tmp<>nil then
memo1.Text:=tmp.innerText; //这里的tmp.innerText就是文章的脚本了
finally
Doc := nil;
CoUninitialize;
end;
end;