0

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

我尝试使用 IronPython 将 python 程序集成到 .Net 中,但不能(lxml 是原因之一)。

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

-

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

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

1 .) 最简单的方法是什么?
2 .) 我是否需要使用 web2py/werkzeug 之类的框架,或者是否有内置的东西我可以使用?!

4

2 回答 2

0

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

请参阅http://oreilly.com/catalog/pythonwin32/chapter/ch12.html中的“在 Python 中实现 COM 对象”部分

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

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

于 2012-08-05T05:22:34.007 回答
0

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

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

哦,Tornado 比 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 的一大优点是它可以很容易地完成简单的任务,但以防万一您需要更复杂的东西 - 使用它们很容易。

哦,还有一件事要记住——我不知道你的代码实际上在做什么,但我认为考虑设计你的 web 服务的 API 时考虑到 REST 可能是个好主意。

于 2012-08-05T05:47:14.890 回答