0

我有一个 signalR 服务器,它使用 DLLImport 和 pinvoke(来自本地机器路径 c:\serverfolder\bin)加载一个非托管 Dll。我有一个 HTML5 客户端来访问 SirnalR 服务器以从非托管 dll 获取数据。

客户端如下。

 $(function () {

        var IgetTagValue = $.connection.tagservice;

        IgetTagValue.client.onvalue = function (message) {
            var text = document.getElementById("value");
            text.value = message;
        };

        $("#Test").click(function () {
            IgetTagValue.server.test("Hello");
        });



        $("#GetTagValue").click(function () {
            var tag = { "ObjectId": 6348, "PropertyId": 0, "ContextId": 1, "ServiceId": 0 };

            var tagValue = document.getElementById("ObjectId").value;
            tag.ObjectId = tagValue;

            IgetTagValue.server.registerTag(JSON.stringify(tag));
        });

        $("#unRegisterTag").click(function () {
            var tag = { "ObjectId": 6348, "PropertyId": 0, "ContextId": 1, "ServiceId": 0 };

            var tagValue = document.getElementById("ObjectId").value;
            tag.ObjectId = tagValue;

            IgetTagValue.server.registerTag(JSON.stringify(tag));
        });
    });

我已经正确定义了 Global aspx 文件,并且代理也在 /signalr/hubs 中成功创建。

我的服务器端代码如下。

        [HubMethodName("test")]
    public void Test(string testString)
    {
        //throw new Exception("Custom Exception");
        this.Clients.Client(this.Context.ConnectionId).onvalue("Test "+ testString);
    }

    [HubMethodName("registerTag")]
    public void Register(string tag)
    {

        Task t = Task.Factory.StartNew(() => DoWork(tag));
    }

    private void DoWork(string tag)
    {
        Rtoid rtoid = JsonConvert.DeserializeObject<Rtoid>(tag);

        if (!tags.Contains(rtoid))
        {

           //Load unmanaged Dll from here and get the callback from the 
            // unmanaged code in OnValue().

            //m_sync.ReleaseMutex();
        }
    }


    public void OnValue(value v)
    {
        this.Clients.Client(this.Context.ConnectionId).onvalue(v);
    }

    public List<ClassName> GetTags()
    {
        return tags;
    }

如果我在 xp 和 win7 中在 localhost 中托管来自 VS2010 的应用程序,并且我能够使用 SignalR 服务从本地路径加载非托管 dll 并且我收到通知,那么一切工作正常。但是当我在 Windows server 2012 上的 IIS8 上托管它时,我没有收到通知,似乎未加载非托管 dll。我有一个 Test() 方法,我在客户端中得到回调,所以我认为没有SignalR 的配置问题。(甚至代理是在/signalr/hubs 中生成的)

在 IIS8 中从服务器的本地路径加载库是否有任何特殊设置?

4

0 回答 0