IronPython 承载和消费WCF服务

来源:互联网 发布:java线程讲解 编辑:程序博客网 时间:2024/05/20 13:40

“IronPython 2.6提供了新特性clrtype,允许程序员用纯IronPython代码提供property、attribute等CLR类型信息。这样IronPython代码就可以无缝地与Sliverlight、WCF等框架集成。”我们就用clrtype来看看怎么承载WCF服务和消费WCF服务。WCF的契约需要定义接口,这是目前IronPython 尚未支持的功能,所以我们先用C#定义个一个WCF的契约:

using System;
using System.Collections.Generic;
using System.ServiceModel;

namespace TestServiceInterface
{
    ///


    /// Description of MyClass.
    ///

    [ServiceContract] 
    public interface ImyService 
    { 
        [OperationContract]
         string GetData(int value);

    }

}

编译成一个程序集TestServiceInterface.dll, 然后在IronPython中实现WCF服务myWcfService.myService,代码如下:

import clr
import clrtype 
clr.AddReference('System.ServiceModel')
clr.AddReference('TestServiceInterface')
from TestServiceInterface import ImyService

from System import Console, Uri 
from 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 r"IronPython WCF服务: 你的输入内容是: %s" % value  

sh = ServiceHost(myService()  ,Uri("http://localhost:7000/myWcfService%22 ) )

sh.AddServiceEndpoint(

       clr.GetClrType(ImyService),

        BasicHttpBinding(),
       "")

sh.Open()

Console.WriteLine("Press to terminate/n") 
Console.ReadLine()

sh.Close()

这里用到了一个clrtype模块, 代码参加IronPython的Sample工程,可以从这里下载:http://ironpython.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=12482 ,第一个例子就是ClrType ,从这里拷贝出来放到我们的py目录下。类myService 必须加一个attribute InstanceContextMode.Single ServiceBehavior 。

我们再来写个测试的客户端代码:

import clr

clr.AddReference('System.ServiceModel')

from   System import Console
import System.ServiceModel

clr.AddReference('TestServiceInterface')

from TestServiceInterface import ImyService

mycf = System.ServiceModel.ChannelFactory[ImyService](

System.ServiceModel.BasicHttpBinding(),

System.ServiceModel.EndpointAddress("http://localhost:7000/myWcfService%22))

wcfcli = mycf.CreateChannel()

print r"IronPython WCF 服务的返回结果是:/n%s" % wcfcli.GetData(11)

Console.WriteLine("Press to terminate/n") 
Console.ReadLine()

运行起来可以得到的结果如下:

image

这样一个基本的WCF服务示例就完成了,示例有个问题是没法使用配置文件来存储WCF的配置信息,只能通过代码方式对WCF服务进行配置。

转载自:

作者: 自由、创新、研究、探索……
出处:http://shanyou.cnblogs.com/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

原创粉丝点击