用C++写了个DLL库 封装了一个别人写的API库我用C#写个winform程序可以正常使用这个DLL可我用WCF调用这个DLL时却报错 接收对 http://localhost:51782/Service1.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。
我把C++中所有涉及到别人的API函数都删除就不会出错了这个是什么原因呢?  线程的关联性么?

解决方案 »

  1.   

    [DllImport("My.dll")]//这是我自己定义的某个动态库  
      public extern int Mycall(int);//这是动态库里的一个函数  
    这段放在CalculatorService 外
      

  2.   

    这可能是由于服务终结点绑定未使用HTTP 协议造成的
      

  3.   

    你的C++dll的方法中是否使用了自定义类型?如果是的话,需要使用DataContract,DataMember特性对class和属性进行说明
      

  4.   


    这些都没问题  WCF下 只要把我DLL中涉及到别人的写的API函数去掉就可以
    但是在winform程序中又没有问题  所以才压抑
      

  5.   


    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_EmployeeService"
              contract="EmInfoSys.Server.Service.AlarmAndLogService" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />绑定了
      

  6.   

    Website和winform,对于platform invoke的影响,我能想到的是
    1. 运行账户不同造成的权限问题。
      winform是当前登录用户,IIS website是network service
      不过看你使用的应该是vs 的web server,应该不是这个问题2. 当前路径不同
      winform的当前路径就是exe所在的路径,而asp.net的当前路径是C:\windows\system32 好像是这个,方正不是你web site的bin目录
      可以将dll copy到%windir%\system32\试一试。
      

  7.   

    对于当前路径问题还有个solution是将bin目录降到Path环境变量中去, 在调用之前。static void AddEnvironmentPaths(string[] paths)
    {
      string path = Environment.GetEnvironmentVariable("PATH") ?? string.Empty;
      path += ";" + string.Join(";", paths);  Environment.SetEnvironmentVariable("PATH", path);
    }
      

  8.   

    昨天我也想过可能是因为DLL以及别人写的API DLL相关依赖库找不到这个问题 所以也做了些测试测试的结果是别人写的API函数 正常返回 我的DLL函数也正常返回 但是在WCF函数返回时报上述的错误 [OperationContract]
            public void GetSnapValue(string PtName)
            {
                Interface_init("172.21.130.59", 0, 1);//我的DLL接口函数 此函数中没有调用别
    //人的API 所以如果只调用这个 不调用GetSnapshotValue的话 WCF可以正常返回
                int dd = 10;
                float ff = 12;
                short ss = 12;
                int Res = GetSnapshotValue("1RCP010VE.av", ref ff, ref ss);//此函数内调用了
    //别人写的API函数   且此函数可以正常返回
           }//在这里WCF返回的时候会报错    如果GetSnapshotValue中不调用别人写的API 则WCF可以正常返回
      

  9.   

    问题解决  别人的dll有问题 结贴