Umbraco 4.5中的自定义Web服务给出奇怪的错误

时间:2010-09-13 18:44:33

标签: web-services umbraco

我们在Umbraco中创建了一个自定义Web服务来添加(异步)文件并上传它们。上传后,使用node和file-information调用服务,以将新节点添加到内容树中。

起初我们的主要问题是服务在Umbraco上下文之外运行,给get_currentuser带来了奇怪的错误。

现在,我们从umbraco.webservices dll继承umbraco BaseWebService,并在设置文件中设置所有访问信息;我们在做任何其他事情之前使用(正确且丑陋的硬编码)管理员进行身份验证。

当我们现在执行webservice(来自浏览器或其他任何东西)时,我们得到:

at umbraco.DataLayer.SqlHelper`1.ExecuteReader(String commandText, IParameter[] parameters)
   at umbraco.cms.businesslogic.CMSNode.setupNode()
   at umbraco.cms.businesslogic.web.Document.setupNode()
   at umbraco.cms.businesslogic.CMSNode..ctor(Int32 Id)
   at umbraco.cms.businesslogic.Content..ctor(Int32 id)
   at umbraco.cms.businesslogic.web.Document..ctor(Int32 id)
   at FileUpload.AddDocument(String ProjectID, String NodeID, String FileName)*

AddDocument是我们的方法。树中不存在节点(文件名没有扩展名)(不是任何地方,它是一个新的文件名/节点)。我们已经清理了回收站,所以它也不在那里。

我们是否遗漏了至关重要的内容,是否有人有解决方案?

以下是webservice的来源;

using umbraco.cms.businesslogic.web;
using umbraco.BusinessLogic;
using umbraco.presentation.nodeFactory;
using umbraco.cms.businesslogic.member;
using umbraco.cms;

/// <summary>
/// Summary description for FileUpload
/// </summary>
[WebService(Namespace = "http://umbraco.org/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class FileUpload : umbraco.webservices.BaseWebService //System.Web.Services.WebService
{

    private string GetMimeType(string fileName)
    {
        string mimeType = "application/unknown";
        string ext = System.IO.Path.GetExtension(fileName).ToLower();
        Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
        if (regKey != null && regKey.GetValue("Content Type") != null)
            mimeType = regKey.GetValue("Content Type").ToString();
        return mimeType;
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }


    [WebMethod]
    public void AddDocument(string ProjectID, string NodeID, string FileName)
    {
        Authenticate("***", "***");
        string MimeType = GetMimeType(FileName); //"application/unknown";

        // Create node
        int nodeId = 1197; 
        string fileName = System.IO.Path.GetFileNameWithoutExtension(@"*****\Upload\" + FileName);

        string secGroups = "";

//EDIT DUE TO COMMENT: Behavior remains the same though
        Document node = umbraco.cms.businesslogic.web.Document.MakeNew(fileName.Replace(".", ""), new DocumentType(1049), umbraco.BusinessLogic.User.GetUser(0), nodeId);


        secGroups = "Intern";

        StreamWriter sw = null;
        try
        {
//EXCEPTION IS THROWN SOMEWHERE HERE
            Document doc = NodeLevel.CreateNode(fileName, "Bestand", nodeId);
            doc.getProperty("bestandsNaam").Value = fileName;
            byte[] buffer = System.IO.File.ReadAllBytes(@"****\Upload\" + FileName);

            int projectId = 0;
            int tempid = nodeId;
//EXCEPTION IS THROWN TO THIS POINT (SEE BELOW)


            try
            {
                Access.ProtectPage(false, doc.Id, 1103, 1103);
                Access.AddMembershipRoleToDocument(doc.Id, secGroups);
            }
            catch (Exception ex)
            {
        // write to file
            }

            try
            {
                doc.Publish(umbraco.BusinessLogic.User.GetUser(0));
                umbraco.library.UpdateDocumentCache(doc.Id);

                umbraco.content.Instance.RefreshContentFromDatabaseAsync();
            }
            catch (Exception ex)
            {
        // write to file
            }
            System.IO.File.Delete(FileName);

        }
        catch (Exception ex)
        {
            // THIS EXCEPTION IS CAUGHT!!
        }
    }
    public override umbraco.webservices.BaseWebService.Services Service
    {
        get { return umbraco.webservices.BaseWebService.Services.DocumentService; }
    }
}

如果有人有解决方案,指针,暗示或其他什么;感谢帮助!!

TIA, riffnl

1 个答案:

答案 0 :(得分:0)

我们已经重写了整个过程(转储所有代码并重新启动),我们现在已经开始工作了。

我认为我们一直在乱用旧代码,试图让它工作,我们错过了一些关键问题,因为它起作用。

无论如何,感谢您的思考!