- 浏览: 257017 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (293)
- web (1)
- [随笔分类]项目管理 (30)
- [随笔分类]WCF (14)
- 未分类 (1)
- [随笔分类]Linq (4)
- [随笔分类]C#基础 (24)
- 项目 (1)
- [网站分类]3.非技术区(技术之外的文章,但不要涉及任何政治内容) (8)
- [网站分类]1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作) (9)
- [随笔分类]Ubuntu (4)
- ASP.Net (1)
- [网站分类]2..NET新手区(用于发表不合适发表在首页的.NET技术文章,包括小经验、小技巧) (30)
- [随笔分类]ASP.NET MVC (20)
- [随笔分类]ASP.NET (3)
- [随笔分类]程序员厨房 (4)
- [随笔分类]英语学习 (28)
- [网站分类]4.其他技术区 (1)
- [随笔分类]Silverlight (12)
- [随笔分类]CodeSmith (8)
- [随笔分类]其他 (4)
- [随笔分类]Ruby (4)
- [发布至博客园首页] (34)
- [网站分类]其他技术区 (3)
- [随笔分类]Ruby on Rails (2)
- [网站分类].NET新手区 (33)
- [随笔分类]TDD (1)
- [随笔分类]不谈技术 (2)
- [网站分类]非技术区 (7)
最新评论
-
yicone:
You make a mistake when paste t ...
WCF步步为营(一):简单示例 -
jinweijie:
你好,这个实现不错,但是在用了scriptmanager以后就 ...
在服务器端保存ViewState
1. WCF只能传输序列化的类型,WCF 能自动序列化.net内置的之类型,但是如果需要传输自定义的类型,必须把自定义的类型标注DataContract
DataContract标注这个类作为数据契约,DataMember属性指明那些字段公布为原数据,是否必需,顺序是多少。
2. 上面的定义,使得Student可以用在服务契约里,下面的Name可以让客户端的名称和服务端不同。
3. 下面是我们生成的代理类,可以看到客户端的名字,而且由于Student的Address未声明DataMember,所以客户端是不可见的
<!---->//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1433
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JackWangServiceClient.CalcService {
using System.Runtime.Serialization;
using System;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Student", Namespace="http://schemas.datacontract.org/2004/07/JackWangWCFService")]
[System.SerializableAttribute()]
public partial class Student : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
private string FirstNameField;
private string LastNameField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private int AgeField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public string FirstName {
get {
return this.FirstNameField;
}
set {
if ((object.ReferenceEquals(this.FirstNameField, value) != true)) {
this.FirstNameField = value;
this.RaisePropertyChanged("FirstName");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public string LastName {
get {
return this.LastNameField;
}
set {
if ((object.ReferenceEquals(this.LastNameField, value) != true)) {
this.LastNameField = value;
this.RaisePropertyChanged("LastName");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute(Order=2)]
public int Age {
get {
return this.AgeField;
}
set {
if ((this.AgeField.Equals(value) != true)) {
this.AgeField = value;
this.RaisePropertyChanged("Age");
}
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="CalcService.CalcService")]
public interface CalcService {
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CalcService/AddInt", ReplyAction="http://tempuri.org/CalcService/AddIntResponse")]
long AddInt(int firstInt, int SecondInt);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CalcService/addAgeOfStudent", ReplyAction="http://tempuri.org/CalcService/addAgeOfStudentResponse")]
JackWangServiceClient.CalcService.Student addAgeOfStudent(JackWangServiceClient.CalcService.Student student);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface CalcServiceChannel : JackWangServiceClient.CalcService.CalcService, System.ServiceModel.IClientChannel {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class CalcServiceClient : System.ServiceModel.ClientBase<JackWangServiceClient.CalcService.CalcService>, JackWangServiceClient.CalcService.CalcService {
public CalcServiceClient() {
}
public CalcServiceClient(string endpointConfigurationName) :
base(endpointConfigurationName) {
}
public CalcServiceClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public CalcServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public CalcServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress) {
}
public long AddInt(int firstInt, int SecondInt) {
return base.Channel.AddInt(firstInt, SecondInt);
}
public JackWangServiceClient.CalcService.Student addAgeOfStudent(JackWangServiceClient.CalcService.Student student) {
return base.Channel.addAgeOfStudent(student);
}
}
}
4. 客户端调用示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using JackWangServiceClient.CalcService;
namespace JackWangServiceClient
{
class Program
{
static void Main(string[] args)
{
CalcServiceClient proxy = new CalcServiceClient();
long result = proxy.AddInt(50, 60);
Student myStudent = new Student();
myStudent.FirstName = "Jack";
myStudent.LastName = "Wang";
myStudent.Age = 18;
Student resultStudent = proxy.addAgeOfStudent(myStudent);
Console.Out.WriteLine("result from server is:" + result);
Console.Out.WriteLine(resultStudent.FirstName + "," + resultStudent.LastName + "," + resultStudent.Age);
Console.ReadLine();
}
}
}
发表评论
-
WCF步步为营(一):简单示例
2008-07-02 17:13 1038本示例通过一个简单的加法服务,来演示WCF最基本的调用。 1. ... -
WCF步步为营(二):使用配置文件改变发布服务的方式
2008-07-02 17:57 6861. 打开上一个项目 2. 修改Program.cs, 注 ... -
WCF步步为营(三):使用配置文件改变使用服务的方式
2008-07-03 10:57 7441. 打开上节的解决方案 ... -
WCF步步为营(四):客户端使用代理类使用服务
2008-07-03 13:13 980首先,客户端要使用服务端的服务,首先必须知道服务的契约。服务端 ... -
WCF步步为营(五):数据契约
2008-07-03 17:11 5371. WCF只能传输序列化的类型,WCF 能自动序列化.net ... -
WCF跟踪调试
2009-03-16 11:56 1953WCF提供了两个工具可以跟踪WCF的调用过程,我主要是用来跟踪 ... -
使用Fiddler测试WCF
2009-04-27 14:47 1604之前自己为测试人员写了个工具来测试WCF,但是当时是硬编码的, ... -
WCF 小提示:Contract-First时的注意事项
2009-04-30 12:05 781在Contract-First的模式下 我们使用svcuti ... -
[Tips]:SQL server 2005 Create Assembly Failed
2009-05-14 16:45 1137今天创建SQL server2005 程序集时,提示权限失败, ... -
WCF步步为营(一):简单示例
2008-07-02 17:13 1319本示例通过一个简单的加法服务,来演示WCF最基本的调用。 1. ... -
WCF步步为营(二):使用配置文件改变发布服务的方式
2008-07-02 17:57 9021. 打开上一个项目 2. 修改Program.cs, 注 ... -
WCF步步为营(三):使用配置文件改变使用服务的方式
2008-07-03 10:57 9231. 打开上节的解决方案,为JackWangServiceCl ... -
WCF步步为营(四):客户端使用代理类使用服务
2008-07-03 13:13 1546首先,客户端要使用服务端的服务,首先必须知道服务的契约。服务端 ...
相关推荐
7. **数据转移优化**: 数据契约支持序列化和反序列化,可以有效减少数据传输量。 8. **错误处理与诊断**: 提供详细的跟踪、日志记录和故障恢复机制,便于调试和问题定位。 **四、WCF的挑战与替代技术** 虽然WCF...
理解并熟练掌握数据契约、操作契约和服务配置契约的创建和管理,有助于构建健壮、可扩展和安全的WCF服务。同时,考虑到版本控制、异常处理、安全性和互操作性,将使你的WCF应用更具灵活性和可靠性。
**WCF数据契约详解** Windows Communication Foundation (WCF) 是微软.NET Framework中用于构建分布式应用程序的服务框架。在WCF中,数据契约(Data Contract)扮演着至关重要的角色,它是服务和客户端之间交换数据...
4. **数据契约**:定义服务间交换的数据结构。 5. **服务行为**:影响服务运行时行为的配置元素,如服务元数据、安全性等。 ### 第二部分:WCF事件 在WCF事件部分,我们将探讨: 1. **事件模型**:WCF中的事件...
WCF支持多种通信协议和数据交换格式,可以灵活地适应不同的应用场景。虽然在.NET Core时代,WCF已逐渐被gRPC等新框架取代,但其背后的原理和技术思想仍然有很高的学习价值,对理解现代微服务架构也有帮助。 总结,...
WCF全面解析:上册.part3.rar
WCF全面解析:上册.part2.rar
**WCF(Windows Communication Foundation)契约设计是开发面向服务应用程序的核心环节。在这一系列课程中,我们将深入探讨如何构建高效、灵活且可扩展的服务契约,为实现企业级的分布式系统奠定坚实基础。** **1. ...
3. **显式的面向服务特性**:WCF 明确地将服务契约、操作契约和数据契约作为其核心组件,强调面向服务的设计原则。 ##### 1.3 WCF 服务框架模型 WCF 服务主要由三部分组成:服务类、宿主程序和终结点。 - **服务...
数据契约是WCF中的基础组件,用于定义可序列化的数据类型。通过使用`[DataContract]`和`[DataMember]`特性,我们可以指定哪些字段或属性应被序列化并作为消息的一部分传递。 ```csharp [DataContract] public class...
通过以上对WCF契约设计的详细解析,我们可以看到,无论是服务契约还是数据契约、消息契约,每种契约都有其独特的应用场景和价值。开发者可以根据项目的实际需求选择合适的设计方法,从而构建高效、稳定的面向服务的...
在WCF(Windows Communication Foundation)中,数据契约(DataContract)是一种用于定义可序列化的自定义数据类型的方式,使得这些数据可以在服务端和客户端之间安全、高效地传输。数据契约是WCF服务的核心组成部分...
为了更好地处理数据契约的变化,WCF提供了`IExtensibleDataObject`接口。这个接口的主要目的是在序列化和反序列化过程中保留未知的数据元素,以保持向后兼容性。 - **实现**: - 实现该接口需要提供一个`Extension...
我的WCF之旅- 创建一个简单的WCF程序 - Artech WCF入门之选绝佳的例子 代源源于:《WCF全面解析 上》 编程工具:VS2010 语言:C# blog 《IIS站点中部署 WCF项目》
**WCF数据契约实例源码**是Windows Communication Foundation(WCF)学习的重要组成部分。WCF是微软提供的一个全面的框架,用于构建可互操作的分布式应用程序。数据契约是WCF中用于定义服务间数据交换格式的关键概念...
《WCF全面解析(套装上下册)》由蒋金楠所著,是作者多年潜心研究WCF技术的心血之作,也是这些年来从事WCF开发的经验总结。 因为上传大小限制,分卷压缩了三个rar,请全部下载完成后解压缩。
在本次的课程中,我们将向大家介绍设计服务契约,数据契约和消息契约的实用 指导,向大家展示什么时候,以及如何使用它们。同时,在本次课程中您将学习到如何处理复杂类型的序列化,如何使用契约,以及在哪里处理...
总的来说,WCF元数据查询器和分析器是WCF开发和维护过程中的得力助手,它们提供了对服务元数据的洞察,帮助开发者更好地理解和利用WCF服务。通过这些工具,我们可以提升服务的可发现性、可维护性和互操作性,从而...
**WCF元数据浏览器**是Windows Communication Foundation(WCF)框架中的一个重要工具,它允许开发者探索和理解服务的元数据信息。WCF是.NET Framework的一部分,用于构建分布式应用程序,提供了丰富的服务模型,...
WCF(Windows Communication Foundation)是微软.NET框架中的一种高级通信技术,它提供了创建分布式应用程序的强大工具。在WCF中,服务协定是定义服务行为的核心元素,它描述了服务能够提供哪些操作以及如何与这些...