博客
关于我
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/

你可能感兴趣的文章
OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
查看>>
OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
查看>>
OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
查看>>
OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 水下检测+扩散模型:或成明年CVPR最大惊喜!
查看>>
OpenCV与AI深度学习 | 深度学习检测小目标常用方法
查看>>
OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
查看>>
OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
查看>>
OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
OpenCV中的监督学习
查看>>
opencv中读写视频
查看>>
OpenCV中遇到Microsoft C++ 异常 cv::Exception
查看>>
opencv之cv2.findContours和drawContours(python)
查看>>
opencv之namedWindow,imshow出现两个窗口
查看>>
opencv之模糊处理
查看>>
Opencv介绍及opencv3.0在 vs2010上的配置
查看>>
OpenCV使用霍夫变换检测图像中的形状
查看>>
opencv保存图片路径包含中文乱码解决方案
查看>>