对于WCF的几个问题

acqy 2008-10-30 10:24:12
我想请问几个WCF的问题:
1、如果Service部分没有暴露metadata endpoints,Client部分是否可以使用WsdlImporter以及ChannelFactory动态调用Service?比如,如果Client使用下面的代码去动态调用一个File Download Service,那么在Service部分是否需要暴露metadata endpoint?

static void Main(string[] args)
{
EndpointAddress mexAddress = new EndpointAddress("http://localhost:8889/FileTransfer/mex");
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
MetadataSet metadataSet = mexClient.GetMetadata();
WsdlImporter importer = new WsdlImporter(metadataSet);
ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();
ChannelFactory<IFileDownloader> factory = new ChannelFactory<IFileDownloader>(
endpoints[0].Binding, endpoints[0].Address);
IFileDownloader downloader = factory.CreateChannel();
DownloadRequest request = new DownloadRequest("C:\\VIRTPART.DAT");
DownloadResponse response = downloader.Download(request);
Console.WriteLine(response.FileName);
Console.WriteLine(response.Size);
}


2、如果上面的回答是“必须暴露”,那么,如果我希望我的Service始终能够被动态调用,那暴露这个metadata endpoint是否会有安全威胁?如何解决这个矛盾?

3、Binding的设置问题。
比如,我的服务端是采用代码动态配置Service的,代码如下:

static void Main(string[] args)
{
ContractDescription cd = ContractDescription.GetContract(typeof(IFileDownloader));
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.MaxReceivedMessageSize = 10067108864;
basicHttpBinding.TransferMode = TransferMode.Streamed;
basicHttpBinding.MessageEncoding = WSMessageEncoding.Mtom;
//WSHttpBinding basicHttpBinding = new WSHttpBinding();
ServiceEndpoint endpoint = new ServiceEndpoint(
cd,
basicHttpBinding,
new EndpointAddress("http://localhost:8889/FileTransfer/"));

ContractDescription mexCd = ContractDescription.GetContract(typeof(IMetadataExchange));
ServiceEndpoint mexEndpoint = new ServiceEndpoint(
mexCd,
MetadataExchangeBindings.CreateMexHttpBinding(),
new EndpointAddress("http://localhost:8889/FileTransfer/mex"));


System.ServiceModel.ServiceHost host = new System.ServiceModel.ServiceHost(typeof(FileTransferImpl));
host.Opened += (a, b) => Console.WriteLine("Service Opened.");

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8889/FileTransfer/mex");
host.Description.Behaviors.Add(smb);
host.AddServiceEndpoint(endpoint.Contract.ContractType, endpoint.Binding, endpoint.Address.ToString());
host.AddServiceEndpoint(mexEndpoint.Contract.ContractType, mexEndpoint.Binding, mexEndpoint.Address.ToString());
host.Open();
foreach (ServiceEndpoint ep in host.Description.Endpoints)
{
Console.WriteLine(ep.Address.ToString());
}
Console.ReadLine();
}

而客户端是用的第一个问题中的代码。其实事实上Service部分暴露了一个BasicHttpBinding的endpoint,并且设置了这个binding的MaxReceivedMessageSize以及TransferMode,但是我在Client端调试的时候,发现importer.ImportAllEndpoints调用所获得的binding虽然也是BasicHttpBinding,但是上述属性的设置值都遗失了(变成了默认值),这是什么原因呢?有没有办法解决?

希望高人出手相救!

...全文
112 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
acqy 2008-11-11
  • 打赏
  • 举报
回复
我无语,算了,结贴!
Longgreenlee 2008-11-03
  • 打赏
  • 举报
回复
up
acqy 2008-11-03
  • 打赏
  • 举报
回复
继续顶。。。
acqy 2008-10-31
  • 打赏
  • 举报
回复
太没意思了。在线等就是没人回答啊。。。
嫌分不够么?可以加的
acqy 2008-10-31
  • 打赏
  • 举报
回复
这帖子沉的比石头还快。再顶一次,难道真的没有人回答么?
acqy 2008-10-30
  • 打赏
  • 举报
回复
其实事实上Service部分暴露了一个BasicHttpBinding的endpoint -> 其实事实上Service Host部分暴露了一个BasicHttpBinding的endpoint
acqy 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 heyu1000 的回复:]
太多了,实在不想看,帮顶,呵呵
[/Quote]

即使是回答其中的某个或者某两个问题也可以啊。
拜托了。。。

heyu1000 2008-10-30
  • 打赏
  • 举报
回复
太多了,实在不想看,帮顶,呵呵
acqy 2008-10-30
  • 打赏
  • 举报
回复
-_-!!!

怎么没人回答啊。。。。。

>_<...

pvgyetg 2008-10-30
  • 打赏
  • 举报
回复
友情UP
acqy 2008-10-30
  • 打赏
  • 举报
回复
没人回答么??
在线等。。。。。
WCF全面解析(套装上下册)》由蒋金楠所著,是作者多年潜心研究WCF技术的心血之作,也是这些年来从事WCF开发的经验总结。书如其名,此书涵盖了WCF几乎所有的知识点,并对其底层框架进行了“庖丁解牛”式的剖析,力求将WCF的整个运行机制完整而清晰地呈现在读者面前。 《WCF全面解析(套装上下册)》上册的前四章在对WCF进行总体介绍的基础上,对构成终结点的三要素(地址、绑定和契约)进行了系统说明;随后的两章则着重剖析序列化和消息编码在WCF中的实现;第7、8章讲述了在服务寄宿和操作调用过程中,WCF的服务端和客户端框架分别为我们做了什么;第9、10章将介绍的重点落在实例化、会话和REST服务上面;在最后一章中采用WCF构建了一个具体的电子商务网站VM,它将指导你如何将理论应用于实践。 《WCF全面解析(套装上下册)》的下册主要涉及一些所谓的“高级”话题,主要包括如何在分布式环境中处理异常(第1章);元数据的导入与导出、发布与获取如何实现(第2章);如何利用WCF对事务的支持将分布式事务引入服务(第3章);如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全、授权与审核;第9章全景展示WCF服务端和客户端的运行时框架,以及在此基础上的所有扩展可能;最后一章为你带来WCF4.0几个独立的新特性。 编辑推荐 《WCF全面解析(套装上下册)》不仅适合尚未接触过WCF,希望尽快入门并进行深入研究的开发人员使用,同样也适合对WCF有一定了解的开发设计人员和架构师阅读。相信不同层次的读者都能从此书中找到自己希望了解的部分。 《WCF全面解析(套装上下册)》的内容不仅适合尚未接触过WCF,希望尽快入门并进行深入研究的开发人员,同样适合对WCF具有一定了解的开发设计人员和架构师。相信不同层次的读者都能从本书中找到自己希望了解的部分。阅读本书的读者需要对.NET,包括对C#和.NET Framework具有一定的了解。如果读者具备了DCOM、Enterprise Library Service、.NET Remoting、Web Service、MSMQ及SOA相关的基础,对阅读此书尽快掌握WCF将大有裨益。 名人推荐我经历了COM时代,一直把Don Box的《COMM本质论》奉为我的指路明灯。能把SOA机理和WCF这种特定厂商实现的技术讲得如《COM本质论》一样完美透彻的,那必属Artech这本经过自己深研、实践而著的心血结晶——《WCF全面解析》。如果你想成为SOA和WCF方面的专家,那么这本书就是你的最好法宝。想想你作为专家而获得的回报,那么你对这本书购买所付出的,简直是太值了。 ——《走出软件作坊》 作者 明源软件CTO 阿朱 首先,金楠是—位工作在一线的优秀的WCF技术人员,这符合我对阅读技术图书的第一个要求和期待。其次,金楠的写作文笔、专业责任也给人以充分信任,这在金楠的文字中读者可以体会。这本《WCF全面解析》全面剖析了构建WCF应用所需要的各方面技术,剥丝抽茧,由浅入深,也是我非常欣赏的技术讲述方式。我相信《WCF全面解析》—书是搞WCF朋友的案头必备。 ——祝成科技与Boolan.com创始人.NET技术专家 李建忠 知识全面、论述准确、逻辑严密是本书的特点。这是一本各层次开发人员都可以从中受益的书:对于初、中级开发人员,它可以帮助你获得WCF全方位的知识,系统地梳理WCF的知识结构,提升动手实践能力;对于高级开发人员,它既可以有效弥补你WCF相关知识中的盲点,又可以让你在自己熟悉的知识点上领略作者的看法和理解。 ——资深架构师 曲春雨 作者简介蒋金楠,网名Artech,现就职于某知名软件公司担任高级软件顾问。连续5届微软MVP(最有价值专家),同时也是少数的双料MVP(Solutions Architecture+Connected System)之一。国内较早接触WCF的人之一,2007年2月起在个人博客(http://www.cnblogs.com/artech)上发表超过两百篇深入介绍WCF的文章,成为了目前国内WCF在线资料的主要来源。

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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