博客
关于我
IronPython 承载和消费WCF服务
阅读量:447 次
发布时间:2019-03-06

本文共 2129 字,大约阅读时间需要 7 分钟。

IronPython 2.6引入了一个名为clrtype的新特性,这使得程序员可以使用纯IronPython代码来提供CLR(Common Language Runtime,公共语言运行时)类型的属性信息。这种功能使得IronPython代码能够无缝地与Sliverlight、WCF(Windows Communication Foundation)等框架集成。在本文中,我们将使用clrtype来探讨如何承载和消费WCF服务。

首先,我们需要定义一个WCF服务的接口。由于IronPython尚未直接支持接口定义,我们将使用C#来定义一个接口:

using System;using System.Collections.Generic;using System.ServiceModel;namespace TestServiceInterface{    ///     /// Description of MyClass.    ///     [ServiceContract]    public interface ImyService    {        [OperationContract]        string GetData(int value);    }}

接下来,我们将使用IronPython和clrtype来实现这个接口,创建一个WCF服务。以下是实现代码:

import clrimport clrtypeclr.AddReference('System.ServiceModel')clr.AddReference('TestServiceInterface')from TestServiceInterface import ImyServicefrom System import Console, Urifrom System.ServiceModel import (ServiceHost, BasicHttpBinding, ServiceBehaviorAttribute, InstanceContextMode)ServiceBehavior = clrtype.attribute(ServiceBehaviorAttribute)class myService(ImyService):    __metaclass__ = clrtype.ClrClass    _clrnamespace = "myWcfService"    _clrclassattribs = [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]    def GetData(self, value):        return "IronPython WCF服务: 你的输入内容是: %s" % valuesh = ServiceHost(myService(), Uri("http://localhost:8000/ServiceHost"))sh.AddServiceEndpoint(    clr.GetClrType(ImyService),    BasicHttpBinding(),    "")sh.Open()Console.WriteLine("Press 
to terminate\n")Console.ReadLine()sh.Close()

此外,我们需要编写一个客户端代码来测试这个WCF服务:

import clrclr.AddReference('System.ServiceModel')from System import Consolefrom System.ServiceModel import (ChannelFactory, BasicHttpBinding, EndpointAddress)clr.AddReference('TestServiceInterface')from TestServiceInterface import ImyServicemycf = ChannelFactory[ImyService](    BasicHttpBinding(),    EndpointAddress("http://localhost:8000/ServiceHost"))wcfcli = mycf.CreateChannel()print("IronPython WCF 服务的返回结果是:\n%s" % wcfcli.GetData(11))Console.WriteLine("Press 
to terminate\n")Console.ReadLine()

需要注意的是,由于IronPython不支持通过配置文件来存储WCF服务的配置信息,我们只能通过代码来配置WCF服务。

此外,IronPython与 Entity Framework 的结合也使用了clrtype模块,这可以作为进一步探索的方向。

转载地址:http://ejifz.baihongyu.com/

你可能感兴趣的文章
POJ 1095 Trees Made to Order
查看>>
POJ 1113 Wall(计算几何--凸包的周长)
查看>>
poj 1125Stockbroker Grapevine(最短路)
查看>>
Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)
查看>>
poj 1151 (未完成) 扫描线 线段树 离散化
查看>>
POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
查看>>
poj 1163 数塔
查看>>
POJ 1177 Picture(线段树:扫描线求轮廓周长)
查看>>
Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)
查看>>
POJ 1182 食物链(并查集拆点)
查看>>
POJ 1185 炮兵阵地 (状态压缩DP)
查看>>
POJ 1195 Mobile phones
查看>>
POJ 1228 Grandpa's Estate (稳定凸包)
查看>>
poj 1236(强连通分量分解模板题)
查看>>
poj 1258 Agri-Net
查看>>
quagga 和 zebos
查看>>
poj 1286 Necklace of Beads
查看>>
POJ 1321 棋盘问题
查看>>
poj 1321(回溯)
查看>>
Qt高级——Qt元对象系统源码解析
查看>>