from ibapi.client import EClient
from ibapi.wrapper import EWrapper
class MyWrapper(EWrapper):
def nextValidId(self, orderId:int):
print("setting nextValidOrderId: %d", orderId)
self.nextValidOrderId = orderId
# start program here or use threading
app.reqContractDetails(4444, contract)
def contractDetails(self, reqId, contractDetails):
print(reqId, contractDetails.contract)# my version doesnt use summary
def contractDetailsEnd(self, reqId):
print("ContractDetailsEnd. ", reqId)
# this is the logical end of your program
app.disconnect() # delete if threading and you want to stay connected
def error(self, reqId, errorCode, errorString):
print("Error. Id: " , reqId, " Code: " , errorCode , " Msg: " , errorString)
wrapper = MyWrapper()
app = EClient(wrapper)
app.connect("127.0.0.1", 7497, clientId=123)
print("serverVersion:%s connectionTime:%s" % (app.serverVersion(), app.twsConnectionTime()))
from ibapi.contract import Contract
contract = Contract()
contract.symbol = "XAUUSD"
contract.secType = "CMDTY"
contract.exchange = "SMART"
contract.currency = "USD"
app.run() # delete this line if threading
# def runMe():
# app.run()
# import threading
# thread = threading.Thread(target = runMe)
# thread.start()
# input('enter to disconnect')
# app.disconnect()
Вы запрашиваете данные, прежде чем запустить программу чтения сообщений. Может быть, вы получите данные до его начала.
IB рекомендует запускать программу после получения nextValidId, чтобы вы знали, что все работает правильно. Поскольку Python API блокирует в цикле чтения сообщений, вам необходимо реализовать многопоточность или структурировать вашу программу для асинхронного запуска.
Я показал, как это сделать, чтобы он просто работал без ввода данных пользователем и управлялся событиями или был асинхронным. Это означает, что программа ждет, пока она должна что-то сделать, а затем она это делает.
Я включил параметр потоков, просто измените комментарии.
ContractDetails.summary был изменен на контракт. Я не уверен, что это когда-либо было обобщением в python, не знаю, откуда вы это взяли.
Это имеет отношение к способу, которым Вы структурируете свой запрос. Ваш вызов JQuery отправляет данные в действие AddLink с Пользовательским контроллером как данные POST, что означает в Вашем коде C#, Вы получите доступ к нему через Запрос. Объект формы. С тем, что Вы пытаетесь сделать, Вы структурировали бы URL jQuery как
/User/AddLink/{Title}/{URL}
Это потребовало бы, чтобы Вы записали правило в своем Глобальном. Файл ASAX, который обработал такой вход. Короче говоря, если Вы просто изменяете свой метод AddLink следующим образом:
public ActionResult AddLink()
{
return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])});
}
Я полагаю, что Вы получите ответ, который Вы ищете.
Вы попытались выписать полный URL? У меня был проект, работающий на моем локальном IIS, который имел ту же проблему. Полным URL был http://localhost/myproject/user/addlink, но использующий "/user/addlink" в jQuery ajax вызов отправлял http://localhost/user/addlink (заметьте, что "myproject" отсутствует, потому что это не на самом деле базовый URL насколько jQuery знает).
Вы попытались использовать jQuery.post метод, должно быть что-то как
jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus)
{
if(textStatus=="success")
{
//do something with data which is the result from the call}
}
else
{
//failed somewhere along the line
}
},"json");
значения сообщения отображаются на параметрах в вызове MVC, таким образом, код foxxtrot должен быть ненужным.
Используйте инструмент, такой как поджигатель, чтобы удостовериться, что URL, который Вы ожидаете, называют.
Отладочная программа =>
Панель инструментов разработчика IE может также использоваться вместо Firebug, если Вы предпочитаете IE. если URL вызова и данные сообщения кажутся корректными, и действие не называют, необходимо проверить правила маршрутизации. т.е. это имеет какие-либо значения по умолчанию, в этом случае, платформа MVC будет искать сигнатуру метода, которая содержит те значения по умолчанию (Вы имеете {идентификатор} в Вашем правиле URL?)