質問

SharePoint Foundation 2010の「ポータル」を開発しています。私はSharePointの新しいインスタンスを設定するインストーラを作る責任があります。ソリューションファイルとSharePointの構成のインストールだけでなく、それは単なる処理されます。インストーラは、ファイルの展開をGACに処理し、当社の連合セキュリティクライアントを作成します(SharePointクレームベースの認証に使用されます)。

インスタンスのインストール中に、SharePointと特別に関連したいくつかのタスクを完成させ、.NET 3.5:でSharePoint APIを使用します。

  1. trust を作成/設定する
  2. Webアプリケーションを作成します。
  3. ファームとWebアプリケーションへのソリューションをデプロイする
  4. デフォルトサイトコレクションを作成
  5. サイトコレクションのデフォルト機能を有効にする
  6. Webアプリケーションの更新 "プロパティ"

    up私は単一のSharePointサーバー上でインストール作業を適切に持つことができました、すなわち1つのサーバーはファームデータベースをホストし、別のサーバーはSharePoint Servicesのフルスタックです。私たちのホスティング環境のSharePointの現実世界設定を模倣するセットアップでテストを開始しました。そこには、データベースサーバーと少なくとも3つのSharePointサーバーがあり、そのうちの1つだけが中央管理があります。

    私が稼働した問題は、この場合、私は正しくそしてエラーがなくても、機能の起動を除いて上記のすべての手順を実行できます。この手順を実行したコードを削除し、そのサイトを起動し、認証、およびデフォルトの「チーム」テーマを見ることで正しく作成されたことを確認しました。 。ただし、既定の機能をAPI経由またはサイトコレクション設定で有効にすると、サイトにアクセスしてエラーが発生することができなくなります。

    私の問題の核、そして私がここで説明するときに私が直面する問題について来る。私たちの解決策は、セキュリティの側面からのロット構成とSharePointの外部の他のサービスへの依存点からのロットの設定を含みます。私たちの設定のいくつかがサーバー全体で伝播されていないかどうかはわかりません。ソリューションでエラーページを引き起こす内部エラーが発生します。農場の状況にこだわっている場合は、「プロパティ」を設定しているのかどうかもわかりません。私が最初にこのタスクで始まったときに私がこれらの権利を設定していないという問題があり、私が今見ているものと似た問題を引き起こしました。

    ソリューションが正しくデプロイされている場合は、機能を破損している場合もありません。私はそれぞれのSharePointサーバー上でULSビューアを設定していますが、エラーページで受信したエラーの相関IDに関するものは何も見つかりません。私は実際には「Master」SharePoint ServerのULSビューアにイベントを取得しません。私は他の2つのサーバー上の視聴者内の解の展開と後退を見ることができます。

    私は複数のサーバーを持つ農場で起こるものがない必要があります。私が解決策を展開し、私を助けるためにプロパティを設定するために誰かが私が使用するコードのビットを見てみることができることを願っています。私は私がいかなるULS視聴者にもたらされているというエラーがわからない理由を理解したいと思います。誰かが私にこれを説明できますか?

    また、C#APIを介してSharePointを設定および設定する方法のより確実な例を探しています。この時点まで私はコマンドレットのコードを分解し、コードでできることを複製してきました。私はまだC#を介して機能を有効にするための「正しい」方法はありません、そして、stsadm.exeを実行しているプロセスを作成するだけです。

    解決策を追加して展開するためのマイコード:

          SPSolution newSolution = SPFarm.Local.Solutions.Add(Path.Combine(this.SharePointPointRootFolder, solutionDefinition.filename));
    
          if (!solutionDefinition.webApplicationSpecific)
          {
            Console.WriteLine("Adding a farm specific solution.");
    
            newSolution.Deploy(DateTime.Now, true, true);
    
            this.WaitForSolutionJobsToComplete(newSolution.Id);
    
            newSolution.Synchronize();
          }
          else //specific to a web application.  Load the new solution.
          {
            Console.WriteLine("Adding web application specific solution.");
    
            Collection<SPWebApplication> webAppCol = new Collection<SPWebApplication>();
            webAppCol.Add(this.WebApplication);
    
            newSolution.Deploy(DateTime.Now, true, webAppCol, true);
    
            this.WaitForSolutionJobsToComplete(newSolution.Id);
    
            newSolution = SPFarm.Local.GetObject(newSolution.Id) as SPSolution;
    
            newSolution.Synchronize();
    
            this.WaitForSolutionJobsToComplete(newSolution.Id);
    
            newSolution.Update();
          }
    
    .

    これは機能を有効にするための私のコードです。 STSADM.EXEを使用するプロセスを使用するだけです。

    void UpdateFeatures(SPSite site)
    {
      Console.WriteLine("Updating features.");
    
      SPSolutionDefinitionCollection collection = SolutionConfigurer.LoadSolutionDefinitions();
    
      foreach (SPSolutionDefinition solutionDefinition in collection.spSolutionDefinition)
      {
    
        Guid id = new Guid(solutionDefinition.ID);
    
        if (solutionDefinition.spFeatureDefinition != null && solutionDefinition.spFeatureDefinition.Length > 0)
        {
          foreach (Models.SPFeatureDefinition fDef in solutionDefinition.spFeatureDefinition)
          {
            Guid fDefId = new Guid(fDef.ID);
    
            //this.Activate(fDefId, site);
    
            Process stsadmP = WebApplicationConfigurer.GetSTSADMProcess(this.STSADMPath, "-o activatefeature -id " + fDef.ID + " -url " + this.SiteCollectionUrl + " -force");
    
            Console.WriteLine(string.Format("Invoking STSADM.EXE for feature deployment: {0} with arguments:{1}", stsadmP.StartInfo.FileName, stsadmP.StartInfo.Arguments));
    
            stsadmP.Start();
            stsadmP.WaitForExit();
    
            if (stsadmP.ExitCode == 0)
            {
              Console.WriteLine(string.Format("STSADM.EXE successfully ran for feature id {0} and produced this output: {1}", fDefId, stsadmP.StandardOutput.ReadToEnd()));
            }
            else
            {
              Console.WriteLine(string.Format("STSADM.EXE did not produce a successful exit code for feature id {0} and produced this output: {1} + {2}", fDefId, 
                stsadmP.StandardOutput.ReadToEnd(), stsadmP.StandardError.ReadToEnd()));
            }
          }
        }
      }
    }
    
    .

    これは私がプロパティを更新する方法です。私は解決策を展開した後にそれをしていたので、私はこれを最後にしていますが、アクティブな機能が値をリセットしているようです。

    public void UpdatePropertiesWebApplication()
    {
      string dnsName = this.SigningCertificate.GetNameInfo(X509NameType.DnsName, false);
    
      SPWebApplication webApplication = SPFarm.Local.GetObject(this.WebApplicationId) as SPWebApplication;
    
      if (webApplication != null)
      {
        Console.WriteLine("Updating property information for the web application.");
    
        if (!webApplication.Properties.ContainsKey(Constants.PropertyBagKeys.ESB_ROOT))
        {
          webApplication.Properties.Add(Constants.PropertyBagKeys.ESB_ROOT, this.ESBUrl);
        }
        else
        {
          Console.WriteLine("Updating ESB Root URL. " + this.ESBUrl);
          webApplication.Properties[Constants.PropertyBagKeys.ESB_ROOT] = this.ESBUrl;
        }
    
        Console.WriteLine("ESB Root Url: " + webApplication.Properties[Constants.PropertyBagKeys.ESB_ROOT]);
    
        if (!webApplication.Properties.ContainsKey(Constants.PropertyBagKeys.REALM))
        {
          webApplication.Properties.Add(Constants.PropertyBagKeys.REALM, this.SharePointTrustPoint);
        }
        else
        {
          Console.WriteLine("Updating realm. " + this.SharePointTrustPoint);
          webApplication.Properties[Constants.PropertyBagKeys.REALM] = this.SharePointTrustPoint;
        }
    
        Console.WriteLine("Realm: " + webApplication.Properties[Constants.PropertyBagKeys.REALM]);
    
        if (!webApplication.Properties.ContainsKey(Constants.PropertyBagKeys.SSO_ROOT))
        {
          webApplication.Properties.Add(Constants.PropertyBagKeys.SSO_ROOT, this.SSOUrl);
        }
        else
        {
          Console.WriteLine("Updating the broker url. " + this.SSOUrl);
          webApplication.Properties[Constants.PropertyBagKeys.SSO_ROOT] = this.SSOUrl;
        }
    
        Console.WriteLine("Broker Url: " + webApplication.Properties[Constants.PropertyBagKeys.SSO_ROOT]);
    
        if (!webApplication.Properties.ContainsKey(Constants.PropertyBagKeys.TRUSTED_CERT_DNS_IDENT))
        {
          webApplication.Properties.Add(Constants.PropertyBagKeys.TRUSTED_CERT_DNS_IDENT, dnsName);
        }
        else
        {
          Console.WriteLine("Updating trusted cert dns identity. " + dnsName);
          webApplication.Properties[Constants.PropertyBagKeys.TRUSTED_CERT_DNS_IDENT] = dnsName;
        }
    
        Console.WriteLine("Trusted Certificate Identity: " + webApplication.Properties[Constants.PropertyBagKeys.TRUSTED_CERT_DNS_IDENT]);
    
        webApplication.Update(true);
      }
    }
    
    .

役に立ちましたか?

解決

あなたの一般的な質問に答えるために、SharePoint 2010でソリューションを展開するための推奨される方法はPowerShellを使用することです。 新機能:SharePoint

Windows PowerShellはstsadm.exe管理ツールに優先されます。前進するには、Windows PowerShell Scripting Technologyを使用してSharePoint Foundation 2010で新しいコマンドラインスクリプトを開発する必要があります。

PowerShell:で展開するためのサンプルとスクリプトがここにあります。

他のヒント

全く正直になるために、私が直接STSADMでできるコードの中で何もすることもできません。

だから私はいつも私が必要なものと同等のものを使うだけです:

stsadm -o deletesolution -name solution.wsp -override
stsadm -o addsolution -filename c:\path\solution.wsp
stsadm -o deploysolution -name solution.wsp -allowgacdeployment -local -force
.

それで...

機能を有効にする
ソリューションオプションを設定する
マスターテンプレートを適用する
サブサイトを作成する
リストを作成する
Webパーツを追加する
権限を設定する
ナビゲーションと列を非表示/表示する




展開には展開にデータを追加します 仕上げ

私はあなたが使用する方法を使って解決策を展開しようとしている多くの問題を持っていました(ここに投稿して解決策が見つかりませんでした)

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top