2016-12-13 9 views
0

Tomasz Janczukの素晴らしいedgejsライブラリを使用して、サードパーティのDLLから関数を呼び出そうとしています。私が得ているエラーメッセージによれば、コードは情報を返すかもしれないし、そうでないかもしれない。エラーメッセージ(下記参照)は、コードが文字列を期待しているが、代わりにExpandoObjectを取得していると言っています。私はedgejs githubページのサンプルに基づいてこのコードのいくつかの異なるバージョンを試しましたが、それらのすべてが同じエラーを返します。このエラーは、expandoオブジェクトを文字列にキャストするだけの問題だと示唆していますが、今までは成功していません。この問題の助けを借りていただければ幸いです。私はこれが私が認めようとするよりも長い間働くように奮闘してきました。 edgejsのgithubので110_clr_instance.jsサンプルに基づいてEdge.js expandoobjectから文字列にキャスト

コード:

var edge = require('edge'); 

var createSerial = edge.func({ 
    source: {/* 
    using System; 
    using System.Threading.Tasks; 

    public class Startup 
    { 
     public async Task<object> Invoke(string location) 
     { 
      var serial = new Serial(location); 
      return new { 
       validateLocation = (Func<object,Task<object>>)(
        async (location) => 
        { 
         serial.ValidateLocation((string)location); 
         return serial.IsValid; 
        } 
       ) 
      }; 
     } 
    } 

    public class Serial 
    { 
     public static Connection conn = new Connection("https://companyname.moraware.net/companyname/api.aspx", "username", "password"); 
     public bool IsValid { get; private set; } 

     public Serial(bool isValid) 
     { 
      this.IsValid = isValid; 
     } 

     public void ValidateLocation(string location) 
     { 
     conn.AutoRefreshOnTimeout = true; 
     if (!conn.Connected) { conn.Connect(); } 
      this.IsValid = conn.GetInventoryLocations().Any(x => x.InventoryLocationName == location); 
     if (conn.Connected) { conn.Disconnect(); } 
     } 
    } */}, 
    references: ['JobTrackerAPI4.dll','Newtonsoft.Json.dll'] 

    }); 

var serial = createSerial("A01-01", true); 
console.log(serial.validateLocation(null, true)); 

コンソールのエラー出力:

C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161 
return edge.initializeClrFunc(options); 
      ^
Error: Unable to cast object of type 'System.Dynamic.ExpandoObject' to type 'System.String'. 
    at Error (native) 
    at Object.exports.func (C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161:17) 
    at Object.<anonymous> (C:\Users\csnow\NodeApps\MarshallDataEdge\Evolveware_clr_instance.js:5:25) 
    at Module._compile (module.js:413:34) 
    at Object.Module._extensions..js (module.js:422:10) 
    at Module.load (module.js:357:32) 
    at Function.Module._load (module.js:314:12) 
    at Function.Module.runMain (module.js:447:10) 
    at startup (node.js:146:18) 
    at node.js:404:3 

Process finished with exit code 1 

しかし、その後、私はwebstormを使用してコードを通じて段階とエッジからこのエラーを発見しました。 js。 ReferenceError: options is not defined

edgejs_clr_instance_error

答えて

1

あなたはedge.funcにリテラルC#で渡す方法がfunction() {...}ラッパーが不足しています。それは次のようになります。あなたの助けトマシュのための多くの

edge.func({ 
    source: function() {/* 
    // C# code goes here 
    */}, 
    ... 
}); 

よりもむしろ

edge.func({ 
    source: {/* 
    // C# code goes here 
    */}, 
    ... 
}); 
+0

ありがとう! – SnowballsChance

関連する問題