求解决方案:每个大客户,有一个c/s客户端,c/s客户端有自已的数据库,我们服务器端通过Web Service取到客户端的数据,可是客户非常多.我想动

blackhero 2006-12-09 11:09:32
我们的业务:
每个大客户,有一个c/s客户端,c/s客户端有自已的数据库,我们服务器端通过Web Service取到客户端的数据,可是客户非常多.我想动态调用webservice,如何调用/在线

如何解决:::::::
...全文
338 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
totoz 2006-12-09
  • 打赏
  • 举报
回复
Web Service 数据量过大了承受不起吧

并发好象不怎么样
  • 打赏
  • 举报
回复
这是在网上找的,可是不对呀
————————————————————————————————————————
自己的客户端软件,完全可以设计时期就强类型地(应用并且)编译进所有webService,然后是用ClickOnce动态部署。维护中,真正难以用ClickOnce解决的变动情况仅仅是客户端的移动位置而已。

不要用那种所谓动态调用方法,那种东西只能应付类似显示“hello world”式的不重要的功能。
yan63 2006-12-09
  • 打赏
  • 举报
回复
这是在网上找的,可是不对呀
------------------------
获取wsdl生成代理,再编译成dll,最后通过反射动态调用就可以了
上网搜一下,应该还是多的
yan63 2006-12-09
  • 打赏
  • 举报
回复
如果你的服务器要周期性的取客户的数据,要求在客户公网上有个固定的站点可能要求并不过分,这样就可以将获取数据的接口以webservice形式发布,这样在服务端的后台程序中可以针对多客户端进行调度,sp1234的客户端向服务端注册信息的思路可以借鉴。
nicochang 2006-12-09
  • 打赏
  • 举报
回复
如果在一个内网的话
用UDDI
架设一个UDDI服务器
每个客户端的WebService都在这个UDDI里注册一下
你们的服务器端,从UDDI服务器里拿到WebService列表,
检测是否在线
调用WebService
blackhero 2006-12-09
  • 打赏
  • 举报
回复
/// <summary>
/// 根据指定的信息,调用远程WebService方法
/// </summary>
/// <param name="url">WebService的http形式的地址</param>
/// <param name="namespace">欲调用的WebService的命名空间</param>
/// <param name="classname">欲调用的WebService的类名(不包括命名空间前缀)</param>
/// <param name="methodname">欲调用的WebService的方法名</param>
/// <param name="args">参数列表</param>
/// <returns>WebService的执行结果</returns>
/// <remarks>
/// 如果调用失败,将会抛出Exception。请调用的时候,适当截获异常。
/// 异常信息可能会发生在两个地方:
/// 1、动态构造WebService的时候,CompileAssembly失败。
/// 2、WebService本身执行失败。
/// </remarks>
/// <example>
/// <code>
/// object obj = InvokeWebservice("http://localhost/GSP_WorkflowWebservice/common.asmx","Genersoft.Platform.Service.Workflow","Common","GetToolType",new object[]{"1"});
/// </code>
/// </example>
///
public static object InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args)
{
try
{
System.Net.WebClient wc = new System.Net.WebClient();
System.IO.Stream stream = wc.OpenRead(url+"?WSDL");
System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream);
System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter();
sdi.AddServiceDescription(sd,"","");
System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace);
System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();
ccu.Namespaces.Add(cn);
sdi.Import(cn,ccu);
Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider();
System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler();
System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters();
cplist.GenerateExecutable = false;
cplist.GenerateInMemory = true;
cplist.ReferencedAssemblies.Add("System.dll");
cplist.ReferencedAssemblies.Add("System.XML.dll");
cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
cplist.ReferencedAssemblies.Add("System.Data.dll");
System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
if(true == cr.Errors.HasErrors)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach(System.CodeDom.Compiler.CompilerError ce in cr.Errors)
{
sb.Append(ce.ToString());
sb.Append(System.Environment.NewLine);
}
throw new Exception(sb.ToString());
}
System.Reflection.Assembly assembly = cr.CompiledAssembly;
Type t = assembly.GetType(@namespace+"."+classname,true,true);
object obj = Activator.CreateInstance(t);
System.Reflection.MethodInfo mi = t.GetMethod(methodname);
return mi.Invoke(obj,args);
}
catch(Exception ex)
{
throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));
}
}

这是在网上找的,可是不对呀
blackhero 2006-12-09
  • 打赏
  • 举报
回复
Web Service在c/s的客户端上,我们来维护
nicochang 2006-12-09
  • 打赏
  • 举报
回复
UDDI
nicochang 2006-12-09
  • 打赏
  • 举报
回复
Web Service在你们的服务器上,还是在c/s的客户端上
谁来维护
  • 打赏
  • 举报
回复
你可以设计一个服务器“网关”webService,它兼容主动和被动与客户端通讯以及管理客户端域名/IP移动的管理。

如果客户端在公网上(这基本上是奢望),那么每一个客户端上线之后都向这个网关注册自己的移动地址,然后服务器端从网关中获得所有客户端的动态地址信息进行调用。

如果客户端不在公网上,就老实按照web的设计去做吧,客户端轮询服务器端。

客户端使用ClickOnce就可以做到自动升级系统。
blackhero 2006-12-09
  • 打赏
  • 举报
回复
服务器端用一个后台程序


cansum396 2006-12-09
  • 打赏
  • 举报
回复
做多个数据库连接字符串进行联接
blackhero 2006-12-09
  • 打赏
  • 举报
回复
解决了,用Wsdl.exe生成一个代理类.


修改构造函数


62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧