0


0

Umbraco 4.5のカスタムWebサービスで奇妙なエラーが発生する

UmbracoでカスタムWebサービスを作成し、ファイルを追加(非同期)してアップロードします。 アップロード後、ノードとファイル情報を使用してサービスが呼び出され、コンテンツツリーに新しいノードが追加されます。

最初の主な問題は、サービスがUmbracoコンテキストの外部で実行され、get_currentuserで奇妙なエラーが発生することでした。

これで、umbraco.webservices dllからumbraco BaseWebServiceを継承し、設定ファイルにすべてのアクセス情報を設定しました。 (正しくて(いハードコード化された)管理者を使用して他の作業を行う前に認証を行います。

(ブラウザまたはその他から)Webサービスを実行すると、次のようになります。

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はメソッドです。 ノード(拡張子のないファイル名)はツリーに存在しません(どこにも存在せず、新しいファイル名/ノードです)。 ごみ箱をクリアしたので、そこにもありません。

私たちは重要な何かを見逃していますか、誰かが解決策を持っていますか?

以下はWebサービスのソースです。

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

///
/// Summary description for FileUpload
///
[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


プロシージャ全体を書き直し(すべてのコードをダンプして再起動します)、動作するようになりました。

古いコードを機能させるために、古いコードをいじくり回してきたので、いくつかの重要な問題を見逃していました。

とにかく考えてくれてありがとう!