Problem in BC using my own DLL?

NDForTheCode
Member Posts: 3
Hello guys,
I am writing here, because we have one problem occurring whatever we try to do:
The Problem:
Cannot create an instance of the following .NET Framework object: assembly XXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=97113f8bddac1f33, type XXXX.ClassA
* It triggers in the function below
I made my own .NET Framework class library and generated XXXX.dll.
I made everything in my BC app:
In Codeunit:
dotnet
{
assembly(XXXX)
{
version = '1.0.0.0';
culture = 'neutral';
PublicKeyToken = '97113f8bddac1f33';
type(XXXX.ClassA; ClassA)
{ }
}
}
as well as in function:
procedure CallRESTWebService()
var
ClassAVar: DotNet ClassA;
begin
UnicarsSetup.Get();
ClassAVar:= ClassAVar.ClassA(); //triggers the problem
//...
end;
Also in settings.json:
"al.assemblyProbingPaths": [
"./.netpackages",
"C:/Program Files/Microsoft Dynamics 365 Business Central/180/Service/Add-ins"]
* The dll security settings are in Full Control it is uploaded in each path included in settings.json file
* Service is restarted every time
* as you can see in above code I have publicKey, Version.
I tried with making the Constructor of the class, not using the default. The app can be published without problems.
I would be grateful for any kind of help!
I am writing here, because we have one problem occurring whatever we try to do:
The Problem:
Cannot create an instance of the following .NET Framework object: assembly XXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=97113f8bddac1f33, type XXXX.ClassA
* It triggers in the function below
I made my own .NET Framework class library and generated XXXX.dll.
I made everything in my BC app:
In Codeunit:
dotnet
{
assembly(XXXX)
{
version = '1.0.0.0';
culture = 'neutral';
PublicKeyToken = '97113f8bddac1f33';
type(XXXX.ClassA; ClassA)
{ }
}
}
as well as in function:
procedure CallRESTWebService()
var
ClassAVar: DotNet ClassA;
begin
UnicarsSetup.Get();
ClassAVar:= ClassAVar.ClassA(); //triggers the problem
//...
end;
Also in settings.json:
"al.assemblyProbingPaths": [
"./.netpackages",
"C:/Program Files/Microsoft Dynamics 365 Business Central/180/Service/Add-ins"]
* The dll security settings are in Full Control it is uploaded in each path included in settings.json file
* Service is restarted every time
* as you can see in above code I have publicKey, Version.
I tried with making the Constructor of the class, not using the default. The app can be published without problems.
I would be grateful for any kind of help!
0
Answers
-
I think running dlls in BC on cloud is no longer supported. I think there are some workarounds but no idea, as I dont use that version.
I recall you have to instance them in NAV as : metapackConstructor:=metapackConstructor.MetaPackProgram();
Anyway I can see you are on prem (because the addins path).
however, if you want to call a WS, and you have access to AL, I suggest you do this way:procedure CallService(ProjectName: Text; RequestUrl: Text; RequestType: Integer; payload: Text; Username: Text; Password: Text; var HttpReturnedStatuscode: Integer): Text var Client: HttpClient; RequestHeaders: HttpHeaders; RequestContent: HttpContent; ResponseMessage: HttpResponseMessage; RequestMessage: HttpRequestMessage; ResponseText: Text; contentHeaders: HttpHeaders; begin RequestHeaders := Client.DefaultRequestHeaders(); RequestHeaders.Add('Authorization', CreateBasicAuthHeader(Username, Password)); case RequestType of 0: Client.Get(RequestURL, ResponseMessage); 1: begin RequestContent.WriteFrom(payload); RequestContent.GetHeaders(contentHeaders); contentHeaders.Clear(); contentHeaders.Add('Content-Type', 'application/json'); RequestMessage.Content := RequestContent; RequestMessage.SetRequestUri(RequestURL); // RequestMessage.Method := 'PATCH'; RequestMessage.Method := 'PUT'; client.Put(RequestURL, RequestContent, ResponseMessage); end; 2: begin RequestContent.WriteFrom(payload); RequestContent.GetHeaders(contentHeaders); contentHeaders.Clear(); contentHeaders.Add('Content-Type', 'application/json'); Client.Post(RequestURL, RequestContent, ResponseMessage); end; 3: Client.Delete(RequestURL, ResponseMessage); end; ResponseMessage.Content().ReadAs(ResponseText); HttpReturnedStatuscode := ResponseMessage.HttpStatusCode; if ResponseMessage.HttpStatusCode <> 200 then begin if StrPos(ResponseText, '"message"') <> 0 then ResponseText := CopyStr(ResponseText, StrPos(ResponseText, '"message"') + 10, StrLen(ResponseText)); /*if GuiAllowed then Error(strsubstno(Text50004, ResponseMessage.HttpStatusCode, ResponseText, payload)) else begin LogErrors(ResponseText); end; */ //Error(strsubstno(Text50004, ResponseMessage.HttpStatusCode, ResponseText, payload)) if GuiAllowed then Message((strsubstno(Text50004, ResponseMessage.HttpStatusCode, ResponseText, payload))); end else exit(ResponseText); end;
if you dont, you can use winhttp automation/dotnet.
Name DataType Subtype Length
WinHTTP Automation 'Microsoft WinHTTP Services, version 5.1'.WinHttpRequestIF ISCLEAR(WinHTTP) THEN CREATE(WinHTTP,TRUE,TRUE); WinHTTP.Open('POST',T50161."PayPal URL"+'oauth2/token', FALSE); //you can put here any headers you require, first use postman to test it etc. WinHTTP.SetRequestHeader('Accept', 'application/json'); WinHTTP.SetRequestHeader('Accept-Language', 'en_US'); WinHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); WinHTTP.SetRequestHeader('Authorization', STRSUBSTNO('Basic %1', T50161."Base64 Client and Secret")); WinHTTP.Send('grant_type=client_credentials'); vInStream := WinHTTP.ResponseStream; REPEAT vInStream.READTEXT(vtext); vBigT.ADDTEXT(vtext); UNTIL (vInStream.EOS);
0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions