我有一个用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这样的框架,或者我可以使用内置的东西吗?
答案 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是个好主意。