Microsoft.NET 4.0 and Visual Studio.NET 2010 ships a lot of new
features in their underlying technologies. In this series of articles, I
want to talk about the new features in the area of Windows
Communication Foundation (WCF) in order to improve the development
experience, enable more communication scenario, support new WS-*
standards and provide a good integration with Windows Workflow
Foundation (WF).
The new features are essentially the following: simplified
configuration, standard endpoints, IIS hosting without a SVC file,
support for WS-Discovery, routing service, REST improvements,
enhancements for the integration with WF to support workflow services,
simple byte stream encoding and ETW tracing.
In this series of article, I will illustrate each feature
explaining the principles and showing some examples.
Support for WS-Discovery
This is the major feature that WCF 4.0 ships. The context of the
scenario covered by this features is an organization whose business
approach is service-oriented and the services are constantly joining and
leaving the network. The problem in this context is that the runtime
location of these services is constantly changing and the clients need
to dynamically discover the new locations.
In order to cover this common scenario, the WS-Discovery
specification was defined to extend the SOAP protocol for dynamically
discovery of services location. The approach enables a client to probe
for service endpoints matching certain criteria to get a list of
candidates. Then this client can choose one service from the list of
candidates.
WS-Discovery defines two modes of operation: managed and ad-hoc
mode.
In the managed mode there is a central server called discovery
proxy that services used to publish their underlying endpoints. Then,
clients talk directly to the discovery proxy to locate services based on
different criteria. WCF 4.0 provides classes to implement your own
discovery proxy.
In the ad-hoc mode, there is no central server. Service
announcement and client requests are sent in a multicast fashion.
Clients discover the services by sending multicast messages, then
services that match the probe respond directly to the client. In order
to minimize the need of the client discovering new services, then the
client can listen to the network for new service announcements. The
limitation of this operation mode is that the service discovery
operation is limited by the protocol used for multicast messages. In the
case of using UDP protocol, the multicast is limited to the local
network.
Let's add support for WS-Discovery to our EchoService service
defined in the first part of the series.
The service contract is shown in the Listing 1
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Runtime.Serialization;
using
System.ServiceModel;
using
System.Text;
namespace
WCF_NewFeatures
{
[ServiceContract
]
public
interface
IEchoService
{
[OperationContract
]
string
Echo(String
message);
}
}
Listing 1
And the service implementation is shown in the Listing 2.
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Runtime.Serialization;
using
System.ServiceModel;
using
System.Text;
namespace
WCF_NewFeatures
{
public
class
EchoService
: IEchoService
{
public
string
Echo(String
message)
{
return
"Called the Echo Service with message "
+ message;
}
}
}
Listing 2
Now let's add WS-Discovery in the configuration file (see
highlighted in yellow in the Listing 3).
<?
xml
version
=
"1.0
"
encoding
=
"utf-8
" ?>
<
configuration
>
<
system.serviceModel
>
<
services
>
<
service
name
=
"WCF_NewFeatures.EchoService
"
behaviorConfiguration
=
"WCF_NewFeatures.EchoServiceBehavior
">
<
endpoint
address
=
""
binding
=
"wsHttpBinding
"
contract
=
"WCF_NewFeatures.IEchoService
">
</
endpoint
>
<
endpoint
name
=
"udpDiscovery
"
kind
=
"udpDiscoveryEndpoint
" />
<
endpoint
address
=
"mex
"
binding
=
"mexHttpBinding
"
contract
=
"IMetadataExchange
"/>
</
service
>
</
services
>
<
behaviors
>
<
serviceBehaviors
>
<
behavior
name
=
"WCF_NewFeatures.EchoServiceBehavior
">
<
serviceMetadata
httpGetEnabled
=
"true
"/>
<
serviceDebug
includeExceptionDetailInFaults
=
"false
"/>
<
serviceDiscovery
/>
</
behavior
>
</
serviceBehaviors
>
</
behaviors
>
</
system.serviceModel
>
</
configuration
>
Listing
3
And the service host is defined as shown in the
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.ServiceModel;
using
System.ServiceModel.Description;
namespace
WCF_NewFeatures
{
class
Program
{
static
void
Main(string
[]
args)
{
ServiceHost
serviceHost = new
ServiceHost
(typeof
(WCF_NewFeatures.EchoService
),new
Uri
("http://localhost:8080/Services/EchoService"
));
serviceHost.Open();
System.Console
.WriteLine("The
EchoService has started"
);
foreach
(ServiceEndpoint
se in
serviceHost.Description.Endpoints)
{
System.Console
.WriteLine("Address:{0},
Binding:{1}, Contract:{2}"
, se.Address, se.Binding.Name,
se.Contract.Name);
}
System.Console
.WriteLine("Please,
press any key to finish ..."
);
System.Console
.ReadLine();
serviceHost.Close();
}
}
}
Listing 4
When you run the application, you can see the WSDL at
http://localhost:8080/Services/EchoService as shown in the Figure 1.
Figure 1
Next step is to consume this service. Let's add a new console
project as the client-side and add a reference to the
System.ServiceModel.dll and System.ServiceModel.Discovery.dll assemblies
(see Figure 2).
Figure 2
Next step is to move to the project directory and run the command
svcutil.exe http://localhost:8080/Services/EchoService?wsdl to generate
the service proxy and the underlying configuration. Let's include only
the service proxy definition because the service location (in the
configuration file) will be discovered dynamically.
Now let's write the discovery code for the client application (see
Listing 5).
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.ServiceModel;
using
System.ServiceModel.Discovery;
namespace
WCFClientConsApp
{
class
Program
{
static
void
Main(string
[]
args)
{
DiscoveryClient
discoveryClient = new
DiscoveryClient
(new
UdpDiscoveryEndpoint
());
FindResponse
findResponse = discoveryClient.Find(new
FindCriteria
(typeof
(IEchoService
)));
EndpointAddress
endpointAddress = findResponse.Endpoints[0].Address;
EchoServiceClient
echoServiceClient = new
EchoServiceClient
(new
WSHttpBinding
(),
endpointAddress);
string
strEcho = echoServiceClient.Echo("Hello
world!"
);
System.Console
.WriteLine("The
service result is "
+strEcho);
System.Console
.WriteLine("Please,
press any key to finish ..."
);
System.Console
.ReadLine();
}
}
}
Listing 5
After you run the client solution and wait for a while, you will
receive the output shown in the Figure 3.
Figure 3
Conclusion
相关推荐
根据提供的文件信息,我们可以归纳出一系列与WCF 4.0相关的专业知识点。这份教材主要围绕Windows Communication Foundation (WCF) 4.0展开,详细介绍了如何利用.NET 4进行服务开发、部署和服务交互等内容。下面我们...
### WCF 4.0 多层服务开发与 LINQ to Entities #### 一、WCF 4.0 概述 Windows Communication Foundation (WCF) 是 Microsoft 提供的一个用于构建服务导向架构(SOA)应用程序的框架。WCF 4.0 作为 .NET Framework...
Packtpub WCF 4.0 Multi tier Services Development with LINQ to Entities Jun.2010 关于WCF 4.0 和LINQ to Entity 的 新书 流行加时尚的编程利器
在技术层面,本书涵盖了WCF 4.0的核心部分,包括服务模型、宿主模型、绑定、消息交换模式、元数据发布、安全性、事务处理、消息路由、可靠性以及宿主和部署等。这些内容帮助读者构建和维护WCF服务,以及了解如何在...
一个非常简单的WCF例子:Hello World 本解决方案有3个项目: 1、WCFClient:客户端,展示通过wcf后得到的结果,一个小的winform; 2、WCFContrlPanel:主控程序,作为打开/关闭wcf服务的控制面板,winform; 3、...
6. **服务质量**:WCF提供服务质量管理,包括服务质量QoS(Quality of Service),如消息队列、负载均衡和故障恢复,确保服务的高效稳定运行。 7. **服务发现**:WCF有内置的服务发现机制,使得服务可以在网络中被...
**创建一个简单的WCF程序:WcfServices与WcfServices2** Windows Communication Foundation(WCF)是.NET Framework中用于构建分布式应用程序的一种强大的服务导向架构。它允许开发人员创建跨平台的、安全的、可靠...
【标题】"我的第一个WCF程序:HelloInDigo"是一个初学者的实践项目,它展示了如何使用Windows Communication Foundation(WCF)技术创建一个简单的服务。WCF是.NET框架的一部分,用于构建分布式、面向服务的应用程序...
WCF全面解析:上册.part3.rar
标题中的“Packtpub.WCF.4.0.Multi.tier.Services.Development.with.LINQ.to.Entities.Jun.2010”暗示了这是一份关于使用Windows Communication Foundation(WCF)4.0开发多层服务的教程,其中特别强调了使用LINQ to...
Windows Communication Foundation (WCF) 是微软推出的一种用于构建分布式应用程序的框架,它集成了多种通信技术,为开发者提供了一种统一的方式来创建、发布和消费服务。WCF是.NET Framework 3.0及更高版本的一部分...
**WCF技术专题:WCF入门与进阶** Windows Communication Foundation(WCF)是微软推出的一种面向服务的架构,用于构建可互操作的分布式应用程序。它整合了.NET框架中的多种通信技术,如ASMX、Remoting、Web ...
WCF全面解析:上册.part2.rar
《Wrox Professional WCF 4: Windows Communication Foundation with .NET 4》这本书是关于Windows Communication Foundation(WCF)技术的权威指南,专为.NET Framework 4.0设计。WCF是微软提供的一种全面的、统一...