将python程序暴露给.Net / C#的最简单方法 - 不能使用ironpython

时间:2012-08-05 05:04:41

标签: c# .net python web-services

我有一个用python编写的自定义业务逻辑 - 有很多原因我不能直接在C#/ .Net(时间约束等)中编写它。

我尝试使用IronPython将python程序集成到.Net中,但不能(lxml being one of the reasons)。

  

我转向更简单的解决方案,将这个python逻辑暴露为   .Net可以调用的Web服务。

-

  

首先,我认为我必须在单独的域上托管我的python代码。   但我意识到,我可以在同一台服务器上安装python&运行这个python服务!!

功能很简单 - .Net传递了一个URL& python程序将数据作为长字符串返回。

1 。)最简单的方法是什么?
2 。)我是否需要使用像web2py / werkzeug这样的框架,或者我可以使用内置的东西吗?

2 个答案:

答案 0 :(得分:0)

您是否考虑过将您的python代码发布为com对象?我过去做过这个。

请参阅http://oreilly.com/catalog/pythonwin32/chapter/ch12.html

中的“在Python中实现COM对象”一节

不确定它如何适合您的.Net环境,但它是可行的。

其他我会调查将它包装在一个简单的XMLRPC服务中,如果它只在你的本地环境中使用,那么你必须进入框架领域(如Django等)。

答案 1 :(得分:0)

我想我会试试Tornado。我过去一直在使用它,它非常容易学习。

无论如何,我想我建议你准备一个在本地运行的小型web服务(使用Tornado)。然后,可以通过在同一台机器上运行的任何代码轻松访问此Web服务,如果有需要,也可以从另一台机器上访问。

哦,龙卷风比Django轻得多......

(下面的示例代码是来自Tornado网站的Hello-World示例 - 我刚刚在此处复制它以显示使用Tornado是多么容易):

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        # put your calculation logic in here (instead of "Hello World"
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

Tornado的一大优势在于,执行简单的任务很简单,但万一你需要更复杂的东西 - 它很容易使用。

哦,还有另外一件事要记住 - 我不知道你的代码实际上在做什么,但我认为考虑设计一个带有REST的webservice'API是个好主意。