我目前正在使用Xamarin.Forms开发聊天应用程序。我添加了以下库作为项目引用:
我设法建立连接并与服务器交换消息。问题在于,在开发的某个阶段,生产环境不仅要求HTTPS请求而且还要求套接字消息使用额外的标头。结果,我总是得到" xhr轮询错误"此事件中的消息:
_socket.On(Socket.EVENT_CONNECT_ERROR, (data) =>
{
//Do something here
});
我试图找到一个示例,如何将标头添加到我的套接字实例,但没有任何运气。我查看了soket.io的Android示例,看起来很简单:
socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
@Override public void call(Object... args) {
Transport transport = (Transport)args[0];
transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
@Override
public void call(Object... args) {
@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
// modify request headers
headers.put("Cookie", Arrays.asList("foo=1;"));
}
});
transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
@Override
public void call(Object... args) {
@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
// access response headers
String cookie = headers.get("Set-Cookie").get(0);
}
});
} });
我尝试在C#中实现类似的代码:
_socket.Io().On("transport", o =>
{
Transport transport = (Transport)o;
transport.On(Transport.EVENT_REQUEST_HEADERS, new ListenerImpl(o1 =>
{
var headers = (Dictionary<string, List<string>>)o1;
headers.Add("MyHeader", new List<string> { "MyHeaderValue" });
}));
transport.On(Transport.EVENT_RESPONSE_HEADERS, new ListenerImpl(o2 =>
{
var headers = (Dictionary<string, List<string>>)o2;
}));
});
但传输事件永远不会被触发。是否可以使用此库向套接字连接添加标头?我错过了什么吗?