13. März 2013 14:43
IF (wshFSO.FileExists(AuftragsfertigungSetup.EPlanBOM2NavisionPATH + KonstAuftrag + '.xml')) THEN BEGIN
....
END ELSE
ERROR('File not found: %1.xml', AuftragsfertigungSetup.EPlanBOM2NavisionPATH + KonstAuftrag);
...
IF NOT Eplan2BOM.RUN THEN BEGIN
result := STRSUBSTNO('Error in processing ' + pConstructionJob + ': %1', COPYSTR(GETLASTERRORTEXT, 1, 990));
EXIT(result);
...
13. März 2013 16:32
13. März 2013 16:58
13. März 2013 17:10
JoergR hat geschrieben:Hab ich gerade gemacht, sehr interessant
Auf dem Service Tier Host den Ordner C:\Temp freigegeben und in NAV hart reingeschrieben:
IF XMLDoc.load('\\localhost\temp\K123456.xml') THEN BEGIN
..
erscheint über Webservice Aufruf:
C:\temp>eplan2bom K12345
Status:200 OK
<Soap:Envelope xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/"><Soap:Body
><RunTask_Result xmlns="urn:microsoft-dynamics-schemas/codeunit/BOMImport"><retu
rn_value>Error in processing K12345: This message is for C/AL programmers: The c
all to member load failed: Zugriff verweigert
.</return_value></RunTask_Result></Soap:Body></Soap:Envelope>
Der dienst läuft jetzt momentan als NETZWERKDIENST, aber zumindest scheint der UNC Pfad doch richtig zu funktionieren.
Daraus schlussfolgere ich, dass der Zugriff auf den "echten" UNC Pfad ebenfalls wegen Zugriffsproblemen nicht klappt und der Pfad erst in der Ausgabe zerstückelt wird.
13. März 2013 17:32
using System;
using System.Data;
using System.Net;
using MSXML2;
namespace Eplan2BOM
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0) {
Console.WriteLine("Parameter 1 must be construction job number");
Environment.Exit(-1);
}
string user = "username";
string pw = "password";
string domain = "ntdomain";
string url = "http://servicetier:7047/DynamicsNAV/WS/Mandant/Codeunit/BOMImport";
//COM XML library
MSXML2.XMLHTTP XMLHTTP = new XMLHTTP();
MSXML2.DOMDocument XMLDoc = new DOMDocument();
string xmlText;
xmlText = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><RunTask xmlns=\"urn:microsoft-dynamics-schemas/codeunit/BOMImport\"><pConstructionJob>" + args[0] + "</pConstructionJob><result></result></RunTask></soap:Body></soap:Envelope>";
XMLHTTP.open("POST", url, false, domain+"\\"+user, pw);
XMLHTTP.setRequestHeader("Content-type", "text/xml");
XMLHTTP.setRequestHeader("SOAPAction", url+":RunTask");
XMLHTTP.send(xmlText);
Console.WriteLine("Status:" + XMLHTTP.status + " " + XMLHTTP.statusText);
//XMLDoc.load(XMLHTTP.responseXML);
Console.WriteLine(XMLHTTP.responseText);
}
}
}
13. März 2013 17:46
JoergR hat geschrieben:Hm bislang klappen nur lokale UNC Pfade, sobalds nach "außen" geht wird der Zugriff verweigert. Der Webservice-Dienst läuft testhalber unter meinem Windows-Benutzer, mit dem ich manuell über auf die externen UNC Netzpfade zugreifen kann.
Es scheint noch eine andere Einstellung am Webservice oder an dem c# Proxy nicht zu stimmen. Ich nehme dabei an, dass der Aufruf in der Navision Codeunit mit dem User passiert, der im Webservice-Dienstekonto eingerichtet ist.
Vielleicht fällt jemanden was hier auf:
- Code:
using System;
using System.Data;
using System.Net;
using MSXML2;
namespace Eplan2BOM
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0) {
Console.WriteLine("Parameter 1 must be construction job number");
Environment.Exit(-1);
}
string user = "username";
string pw = "password";
string domain = "ntdomain";
string url = "http://servicetier:7047/DynamicsNAV/WS/Mandant/Codeunit/BOMImport";
//COM XML library
MSXML2.XMLHTTP XMLHTTP = new XMLHTTP();
MSXML2.DOMDocument XMLDoc = new DOMDocument();
string xmlText;
xmlText = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><RunTask xmlns=\"urn:microsoft-dynamics-schemas/codeunit/BOMImport\"><pConstructionJob>" + args[0] + "</pConstructionJob><result></result></RunTask></soap:Body></soap:Envelope>";
XMLHTTP.open("POST", url, false, domain+"\\"+user, pw);
XMLHTTP.setRequestHeader("Content-type", "text/xml");
XMLHTTP.setRequestHeader("SOAPAction", url+":RunTask");
XMLHTTP.send(xmlText);
Console.WriteLine("Status:" + XMLHTTP.status + " " + XMLHTTP.statusText);
//XMLDoc.load(XMLHTTP.responseXML);
Console.WriteLine(XMLHTTP.responseText);
}
}
}
13. März 2013 17:52
18. März 2013 16:26
//neue Version über Webservice Referenz
com.local.entwicklung.BOMImport webservice = new com.local.entwicklung.BOMImport();
webservice.Credentials = new System.Net.NetworkCredential(user, pw, domain);
webservice.PreAuthenticate = true;
webservice.UnsafeAuthenticatedConnectionSharing = true;
webservice.UseDefaultCredentials = true;
webservice.Timeout = 9000000;
String result = webservice.RunTask(args[0]);
Console.WriteLine(webservice.GetType());
Console.WriteLine("Running as: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Console.WriteLine("Result: " + result);
18. März 2013 17:45
Result: Error in processing K123456: Either the caller does not have the require
d permission or the specified path is read-only.
19. März 2013 07:17
19. März 2013 10:31
19. März 2013 13:00
JoergR hat geschrieben:da bei mir der Service Tier und der SQL auf der gleichen Maschine läuft, benötigt man laut diesem Dokument hier keine Delegation.
http://msdn.microsoft.com/en-us/library/dd355184.aspx
19. März 2013 15:41
19. März 2013 16:10