| « | December 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | |
|
| 统计 |
blog名称:小雨 日志总数:262 评论数量:1273 留言数量:15 访问次数:4701601 建立时间:2005年1月8日 |
| 
|
W3CHINA Blog首页 管理页面 写新日志 退出
[经验杂谈]iis 承载 远程组建 |
组件不可以单独运行,必须要别的程序或者服务像容器一样包含它,才可以被使用,我们可以自己编写服务端,也可以把组件放在 已经有的服务中例如IIS或者windows服务。
1 建立一个web应用程序,删除里面的所有的webform文件,加入一个类,代码如下
using System; using System.Data; using System.Data.SqlClient;
namespace RemoteObject { public class MyObject:MarshalByRefObject { public DataSet GetData() { SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["strconn"]); SqlDataAdapter da=new SqlDataAdapter("select * from Orders",conn); DataSet ds=new DataSet(); da.Fill(ds); return ds; } } }
2 修改web.config
<?xml version="1.0" encoding="utf-8" ?><configuration> <appSettings> <add key="strconn" value="server=.;uid=sa;pwd=;database=northwind" /> </appSettings> <system.runtime.remoting> <application > <service> <wellknown type="RemoteObject.MyObject,WebApplication1" objectUri="RemoteObject.MyObject.soap" mode="SingleCall" /> </service> <channels> <channels> <channel ref="http" name="MyChannel" priority="100" /> </channels>
</channels> </application> </system.runtime.remoting>
</configuration>
type="RemoteObject.MyObject,WebApplication1" 分别是类型 命名空间.类名,程序集名称
objectUri="RemoteObject.MyObject.soap" 客户端访问的服务名
写好了可以测试一下http://localhost/WebApplication1/RemoteObject.MyObject.soap?wsdl
这里的WebApplication1不是程序集的名字而是虚拟目录的名字
3写客户端
采用控制台模式
using System;using System.Data; using System.Data.SqlClient; using System.Configuration;namespace ConsoleApplication1{ /// <summary> /// Class1 的摘要说明。 /// </summary> class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { string s=ConfigurationSettings.AppSettings.Get("ServiceURL"); System.Console.WriteLine (s); RemoteObject.MyObject app = (RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject),System.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]); DataTable dt=app.GetData().Tables[0]; foreach(DataRow dr in dt.Rows) { Console.WriteLine(dr[0]+" "+dr[1]); } Console.ReadLine(); } }}这里的服务端url 我们写在客户端的配置文件里面,配置文件有以下几个要求
•
1 配置文件以 XML 格式保存。 请确保您按照所有 XML 语法规则。 记住, XML 是区分大小写。 如果不正确 XML, 或者拼错元素, 您收到一个 System.Configuration.Configuration 异常。 例如, 作为 < AppSettings > > < appSettings 节显示如果您添加 < 添加 > 元素与一个大写 " K " 代替 " k, " 小写的关键属性或 " a "), 代替小写大写 " A " 与您收到错误信息 (。
•
2 将配置文件必须保存与其相关应用程序位于同一文件夹。
•
为配置文件名称必须使用下列语法:
ApplicationName ApplicationType .config。
其中 ApplicationName 是应用程序, ApplicationType 的名称是种应用程序 (例如, .exe), 和是需要后缀 .config。
这里我的配置文件名字为ConsoleApplication1.exe.config
内容为
<?xml version="1.0" encoding="utf-8" ?><configuration><appSettings> <add key="ServiceURL" value="http://localhost/WebApplication1/RemoteObject.MyObject.soap" /> </appSettings> </configuration> ***如果不从WEB.CONFIG里面设置,可以编程方式实现
但只能写在Global.asax.CS里面,
protected void Application_Start() { IDictionary props = new Hashtable(); props["name"] = "MyChannel"; props["priority"] = "100"; // Null entries specify the default formatters. HttpChannel channel = new HttpChannel( props, null, null ); ChannelServices.RegisterChannel(channel); WellKnownServiceTypeEntry WKSTE = new WellKnownServiceTypeEntry( "RemoteObject.MyObject", "WebApplication2", "RemoteObject.MyObject.soap" , WellKnownObjectMode.SingleCall ); RemotingConfiguration.RegisterWellKnownServiceType(WKSTE); }
|
阅读全文(3304) | 回复(0) | 编辑 | 精华 |
|