<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>YaSP 2010 Blog</title>
	<atom:link href="http://share2010.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://share2010.wordpress.com</link>
	<description>Yet another SharePoint 2010 Blog</description>
	<lastBuildDate>Mon, 16 May 2011 14:49:02 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='share2010.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>YaSP 2010 Blog</title>
		<link>http://share2010.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://share2010.wordpress.com/osd.xml" title="YaSP 2010 Blog" />
	<atom:link rel='hub' href='http://share2010.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Microsoft SharePoint Konferenz 2011</title>
		<link>http://share2010.wordpress.com/2011/05/16/microsoft-sharepoint-konferenz-2011/</link>
		<comments>http://share2010.wordpress.com/2011/05/16/microsoft-sharepoint-konferenz-2011/#comments</comments>
		<pubDate>Mon, 16 May 2011 14:48:58 +0000</pubDate>
		<dc:creator>huzlibuzli</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://share2010.wordpress.com/?p=83</guid>
		<description><![CDATA[8.-9. Juni, Austria Trend Hotel Savoyen, Wien „Build Know-how &#38; CreateConnections“ unter diesem Motto steht Österreichs größter SharePoint Community-Treffpunkt, die Microsoft SharePoint Konferenz vom 8.-9. Juni 2011 in Wien. Ich bin auf der Konferenz mit einer Expert-Sessions zum Thema &#8222;Workflows mit SharePoint einfach umsetzen&#8220; vertreten und freue mich, wenn wir uns dort treffen. Insgesamt bietet die Konferenz [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=share2010.wordpress.com&amp;blog=10913187&amp;post=83&amp;subd=share2010&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="SharePoint Konferenz Wien 2011" src="http://download.ppedv.de/SharePointKonferenz/Vienna/2011/sharepoint_kon2011_140x100.gif" alt="SharePoint Konferenz Wien 2011" width="140" height="100" />8.-9. Juni, Austria Trend Hotel Savoyen, Wien</p>
<p><strong>„Build Know-how &amp; Create</strong><strong>Connections“</strong></p>
<p>unter diesem Motto steht Österreichs größter SharePoint Community-Treffpunkt, die Microsoft SharePoint Konferenz vom 8.-9. Juni 2011 in<br />
Wien.</p>
<p>Ich bin auf der Konferenz mit einer Expert-Sessions zum Thema &#8222;Workflows mit SharePoint einfach<br />
umsetzen&#8220; vertreten und freue mich, wenn wir uns dort treffen.</p>
<p>Insgesamt bietet die Konferenz drei parallele Tracks mit „Expert Sessions“ sowie spezielle Business Roundtables zu ausgewählten Themen. Direkt im<br />
Anschluss an die Konferenz finden darüber hinaus noch ganztägige Workshops statt.</p>
<p>Weitere Infos und Anmeldemöglichkeiten für all jene, die sich ihr Ticket noch nicht gesichert haben gibt’s online unter <a href="http://www.sharepointkonferenz.at">www.sharepointkonferenz.at</a>!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/share2010.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/share2010.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/share2010.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/share2010.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/share2010.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/share2010.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/share2010.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/share2010.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/share2010.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/share2010.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/share2010.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/share2010.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/share2010.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/share2010.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=share2010.wordpress.com&amp;blog=10913187&amp;post=83&amp;subd=share2010&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://share2010.wordpress.com/2011/05/16/microsoft-sharepoint-konferenz-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9b3df46eb449fc7733f6ecd1cf7d41fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">huzlibuzli</media:title>
		</media:content>

		<media:content url="http://download.ppedv.de/SharePointKonferenz/Vienna/2011/sharepoint_kon2011_140x100.gif" medium="image">
			<media:title type="html">SharePoint Konferenz Wien 2011</media:title>
		</media:content>
	</item>
		<item>
		<title>Update SPPersistedObject in SPProxyOperation</title>
		<link>http://share2010.wordpress.com/2010/02/25/update-sppersistedobject-in-spproxyoperation/</link>
		<comments>http://share2010.wordpress.com/2010/02/25/update-sppersistedobject-in-spproxyoperation/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 22:05:49 +0000</pubDate>
		<dc:creator>huzlibuzli</dc:creator>
				<category><![CDATA[Sandboxed Solutions]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[full trusted proxy]]></category>
		<category><![CDATA[Share]]></category>
		<category><![CDATA[SPPersistedObject]]></category>
		<category><![CDATA[SPProxyOperation]]></category>

		<guid isPermaLink="false">http://share2010.wordpress.com/?p=49</guid>
		<description><![CDATA[Das Konzept der Sandboxed Solutions im SharePoint 2010, bei dem user code in einem sehr restriktivem Container ausgeführt wird, kommt immer dann an seine Grenzen, wenn bestimmte Funktionen benötigt werden, die diesen Sicherheitsbereich überschreiten. An dieser Stelle können full trust proxies eingesetzt werden, die für alle Sandboxed Solutions der gesamten SharePoint Farm eben diese Funktionalitäten bereitstellen. Bei meiner Arbeit mit Sandboxed Solutions und full trusted proxies hatte ich [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=share2010.wordpress.com&amp;blog=10913187&amp;post=49&amp;subd=share2010&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Das Konzept der <a href="http://msdn.microsoft.com/en-us/library/ee536577(office.14).aspx" target="_blank">Sandboxed Solutions</a> im SharePoint 2010, bei dem user code in einem sehr restriktivem Container ausgeführt wird, kommt immer dann an seine Grenzen, wenn bestimmte Funktionen benötigt werden, die diesen Sicherheitsbereich überschreiten. An dieser Stelle können <a href="http://blah.winsmarts.com/2009-12-SharePoint_2010_Sandboxed_Solutions__Full_Trust__Proxies.aspx" target="_blank">full trust proxies</a> eingesetzt werden, die für alle Sandboxed Solutions der gesamten SharePoint Farm eben diese Funktionalitäten bereitstellen.<br />
Bei meiner Arbeit mit Sandboxed Solutions und full trusted proxies hatte ich die Anforderung bestimmte Konfigurationsinformationen auf Farm-Ebene zu persistieren. Als Speichermechanismus sollte der <a href="http://www.bluedoglimited.com/SharePointThoughts/ViewPost.aspx?ID=271" target="_blank">Hierarchical Object Store</a> herhalten, ein in SharePoint 2007 eingeführter, eventuell nicht immer bewußt verwendeter Speicherort für globale Konfigurationswerte.    </p>
<h4>Ausgangssituation</h4>
<p>Zum Testen der Grundfunktionalität habe ich ein Testprojekt erzeugt, das sich in Auszügen aus folgenden Bestandteilen zusammensetzt.    </p>
<ol>
<li>Eine einfache Proxy Operation, die von einem sandboxed WebPart aufgerufen wird.</li>
<p><pre class="brush: csharp;">
  public class SetValueOperation : SPProxyOperation
    {
  public override object Execute(SPProxyOperationArgs args)
        {
            ...
        }
    }
</pre></p>
<li>Die Klasse TestPersistedObject, die von SPPersistedObject ableitet und lediglich eine Eigenschaft persistiert.</li>
<p><pre class="brush: csharp;">
  public class TestPersistedObject : SPPersistedObject
    {
  [Persisted]
  private string _strTestValue;

  public string TestValue
        {
  get { return _strTestValue; }
  set { _strTestValue = value; }
        }

  public TestPersistedObject() {}
  public TestPersistedObject(string pName, SPPersistedObject pParent, Guid pID)
  : base(pName, pParent, pID) {}
    }
</pre></p>
<li>Das Erzeugen beziehungsweise Ändern einer Instanz der Klasse TestPersistedObject und die Speicherung im Hierachical Object Store innerhalb der Execute Methode der Proxy-Operation.</li>
<p><pre class="brush: csharp;">
  public class SetValueOperation : SPProxyOperation
    {
  public override object Execute(SPProxyOperationArgs args)
        {
  try
            {
  SetValueArgs setValueArgs = (SetValueArgs)args;
  SPFarm farm = SPFarm.Local;

  TestPersistedObject configObject = farm.GetChild(setValueArgs.SiteID);
  if (!(configObject != null))
                {
  configObject = new TestPersistedObject(setValueArgs.SiteID, farm, Guid.NewGuid());
                }

  configObject.TestValue = setValueArgs.Value;
                configObject.Update();

  return &quot;Item Updated&quot;;
            }
  catch (Exception ex)
            {
                return ex.Message;
            }
        }
    }
</pre></p>
<li>Die Proxy-Operation habe ich dem User Code Service bekannt gegeben und den WebPart auf einer Site Collection veröffentlicht.</li>
</ol>
<p> </p>
<h4>Fehlerbeschreibung</h4>
<p>Beim Ausführen der ProxyOperation erhielt ich die Fehlermeldung <em>„Access denied“</em> und aus dem ULS Log konnte ich diese Zeilen fischen.    </p>
<pre>Updating SPPersistedObject TestPersistedObject-452e-4eee-9615-f17d51f2c41f. Version: -1 Ensure: False, HashCode: 38226137, Id: 8ee88993-de35-4455-9509-012db9ccb7c1, Stack: at Microsoft.SharePoint.Administration.SPPersistedObject.BaseUpdate() at PersistFarmConfigValue.SetValueOperation.Execute(SPProxyOperationArgs args) at Microsoft.SharePoint.Utilities.SPUtility_SubsetProxy.ExecuteProxyOperation_Core(String assemblyName, String typeName, SPProxyOperationArgs args) at Microsoft.SharePoint.Utilities.SPUtility_SubsetProxy.ExecuteProxyOperation_Inner(String assemblyName, String typeName, SPProxyOperationArgs args) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]&amp; outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext) at System.Runtime.Remoting.Messaging.ServerObjectTerminatorSink.SyncProcessMessage(IMessage reqMsg) at System.Runtime.Remoting.Lifetime.LeaseSink.SyncProcessMessage(IMessage msg) at System.Runtime.Remoting.Messaging.ServerContextTerminatorSink.SyncProcessMessage(IMessage reqMsg) at System.Runtime.Remoting.Channels.CrossContextChannel.SyncProcessMessageCallback(Object[] args) at System.Runtime.Remoting.Channels.ChannelServices.DispatchMessage(IServerChannelSinkStack sinkStack, IMessage msg, IMessage&amp; replyMsg) at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage&amp; responseMsg, ITransportHeaders&amp; responseHeaders, Stream&amp; responseStream) at System.Runtime.Remoting.Channels.Ipc.IpcServerTransportSink.ServiceRequest(Object state) at System.Runtime.Remoting.Channels.SocketHandler.ProcessRequestNow() at System.Runtime.Remoting.Channels.SocketHandler.BeginReadMessageCallback(IAsyncResult ar) at System.Runtime.Remoting.Channels.Ipc.IpcPort.AsyncFSCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOverlapped) at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) The SPPersistedObject, TestPersistedObject-452e-4eee-9615-f17d51f2c41f, could not be updated because the current user is not a Farm Administrator.</pre>
<h4> </h4>
<h4>Fehlersuche</h4>
<p>Auf den ersten Blick erschien mir das Problem sehr simpel. Das Speichern von Objekten im Hierachical Object Store setzt bestimmte Berechtigungen auf die Sharepoint-Konfigurationsdatenbank (SharePoint_Config) voraus. Ergo, sollte der Account mit dem der SPUCWorkerProcessProxy ausgeführt wird, in der Gruppe der Farmadministratoren sein und die benötigte Berechtigung dadurch auf der Datenbank erlangen. So kann man es ja auch aus der Fehlermeldung herauslesen. In meiner Umgebung läuft sowohl die Zentraladministration als auch der User Code Service mit dem gleichen Service-Account. Folglich sollte das Berechtigungsproblem nicht vorhanden sein.  </p>
<p>Ok, dann halt mal mit dem SQL Profiler nachschauen, ob überhaupt etwas in Richtung Konfigurationsdatenbank abgefeuert wird. Siehe da, die Leitung ist, zumindest was das Speichern meines Objekts angeht, tot.  </p>
<p>Das mein Code beim Aufrufen der Methode <em>configObject.Update()</em> den Fehler verursacht, findet man recht schnell beim Debuggen heraus. Das sollte aber eigentlich nicht sein, da die Anwendung augenscheinlich mit den richtigen Rechten ausgestattet ist. Es bleibt nicht aus, ich muß der Sache mit dem Reflektor auf den Grund gehen.Der Einstiegspunkt ist die Methode Update der Klasse SPPersistedObject. Diese ruft lediglich die Methode <em>BaseUpdate()</em> auf. Moment, da war doch was im StackTrace der Exception:    </p>
<pre>at Microsoft.SharePoint.Administration.SPPersistedObject.BaseUpdate()</pre>
<p>Jap und da ist auch schon die Fehlermeldung, wunderbar hard coded in ihrer vollen Pracht.  </p>
<p><pre class="brush: csharp;">
internal void BaseUpdate()
{
    ...
  if ((!this.m_SkipPersistedStoreWriteCheck
  !this.PersistedStoreProvider.DoesCurrentUserHaveWritePermission(this))
  !this.HasAdditionalUpdateAccess())
    {
  ULS.SendTraceTag(0x38647975,
  ULSCat.msoulscat_WSS_Topology, ULSTraceLevel.High,
  &quot;The SPPersistedObject, {0}, could not be updated because the current user is not a Farm Administrator.&quot;,
  new object[] { this.ToString() });
  this.PersistedStoreProvider.InvalidateCache(this);
  throw new SecurityException(SPResource.GetString(&quot;AccessDenied&quot;, new object[0]));
    }
    ...
}
</pre></p>
<p>So, dann rennt der Code also in diesen If-Block und bricht die weitere Ausführung der Methode ab. Mein Gefühl sagt mir, das dies etwas mit dem Ergebnis der Methode <em>this.PersistedStoreProvider.DoesCurrentUserHaveWritePermission(this)</em> zu tun haben könnte. Dann weiter, wer ist in diesem Fall der PersistedStoreProvider und wie hat dieser die Methode <em>DoesCurrentUserHaveWritePermission()</em> implementiert?  </p>
<p><pre class="brush: csharp;">
bool ISPPersistedStoreProvider.DoesCurrentUserHaveWritePermission(SPPersistedObject persistedObject)
{
  if (!SPSecurity.AdministrationAllowedInCurrentProcess)
    {
  return false;
    }
  SPFarm farm = (persistedObject is SPFarm) ? (persistedObject as SPFarm) : this.Farm;
  if (null != farm)
    {
  return farm.CurrentUserIsAdministrator();
    }
  return SPFarm.CurrentUserIsBoxAdministrator();
}
</pre></p>
<p>Die konkrete Implementierung des Interfaces <em>ISPPersistedStoreProvider</em> in diesem Fall ist die Klasse <em>SPConfigurationDatabase</em>. Sprechende Namen für Klassen sind doch immer wieder eine feine Sache. Die Methode läßt wieder drei Pfade zu, auf denen man zu einer Erklärung gelangen kann. Ich kürze die Sache mal ab, es liegt an der Implementierung von <em>SPSecurity.AdministrationAllowedInCurrentProcess()</em>.</p>
<p><pre class="brush: csharp;">
internal static bool AdministrationAllowedInCurrentProcess
{
get
{
if (!s_AdministrationAllowedInCurrentProcess.HasValue)
{
string processName = ProcessName;
if ((SPUtility.StsCompareStrings(processName, &quot;SPUCHostService&quot;) || SPUtility.StsCompareStrings(processName, &quot;SPUCWorkerProcess&quot;)) || SPUtility.StsCompareStrings(processName, &quot;SPUCWorkerProcessProxy&quot;))
{
s_AdministrationAllowedInCurrentProcess = false;
}
else
{
s_AdministrationAllowedInCurrentProcess = true;
}
}
return s_AdministrationAllowedInCurrentProcess.Value;
}
}
</pre></p>
<p>Die Ursache wäre damit geklärt, aus dem SPUCWorkerProcessProxy Prozess heraus sollten, so meine Lesart, keine Änderungen an der Konfigurationsdatenbank erfolgen. Erst mal verständlich, leider kann ich es nicht mit meiner Anforderung vereinbaren und sehe auch kein Sicherheitsproblem darin, falls ich einen Weg daran vorbei finde. Wir befinden uns ja auf der Seite der SPProxyOperation, also in einem Prozess der nicht direkt aus der Sandbox heraus manipuliert werden kann. Falls ich bei meinen Überlegungen etwas übersehen habe, freue ich mich auf eure Hinweise!    </p>
<h4>Lösungsansatz</h4>
<p>Bei der Internetrecherche zu dem Thema hab ich zu einem Zeitpunkt, zu dem ich nichts damit anfangen konnte einen <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.sppersistedobject.hasadditionalupdateaccess(office.14).aspx">Kommentar</a> gelesen, der am Ende dann auch für mein Problem zur Lösung wurde. Leider habe ich diesen erst nicht so richtig wahr genommen.<br />
Nochmal zurück zu dem kleinen Ausflug in den SharePoint 2010 Code. In der Methode <em>BaseUpdate()</em> wird zu einem frühen Zeitpunkt abgefragt, ob der aktuelle User über ausreichende Berechtigungen verfügt. Diese If-Abfrage beinhaltet noch eine Art Bypass, mit dem alle Berechtigungsabfragen ausgehebelt werden.  </p>
<p><pre class="brush: csharp;">
if ((!this.m_SkipPersistedStoreWriteCheck &amp;&amp; !this.PersistedStoreProvider.DoesCurrentUserHaveWritePermission(this)) &amp;&amp; !this.HasAdditionalUpdateAccess())
</pre></p>
<p>Im Reflektor betrachtet ist die Methode <em>HasAdditionalUpdateAccess()</em> der Klasse SPPersistedObject erst einmal absolut unspektakulär. Interessant ist aber der Modifier der Methode, dieser schreit förmlich danach, das hier Hand angelegt werden darf!  </p>
<p><pre class="brush: csharp;">
protected virtual bool HasAdditionalUpdateAccess()
{
    return false;
}
</pre></p>
<p>Jetzt fehlt nur noch ein Schritt bis zur Lösung. Die von SPPersistedObject abgeleitete Klasse TestPesistedObject muss um die Methode <em>HasAdditionalUpdateAccess()</em> erweitert werden, dann funktioniert das Hinzufügen beziehungsweise Aktualisieren von Objektinstanzen im Hierachical Object Store.  </p>
<p><pre class="brush: csharp;">
protected override bool HasAdditionalUpdateAccess()
{
  return true;
}
</pre></p>
<p>Zum Ende noch eine kleine Einschränkung, dieser Bypass wird nur innerhalb der <em>BaseUpdate()</em> Methode verwendet. Die Methode <em>DoesCurrentUserHaveWritePermission()</em> wird aber zusätzlich noch von den Settern der Eigenschaften ID, Name und Status von SPPersistedObject verwendet, somit sollten diese nicht aus dem Prozess SPUCWorkerProcessProxy heraus aufzurufen sein.  </p>
<p><a href="http://share2010.files.wordpress.com/2010/02/isppersistedstoreproviderusage.png"><img class="alignnone size-full wp-image-72" title="ISPPersistedStoreProviderUsage" src="http://share2010.files.wordpress.com/2010/02/isppersistedstoreproviderusage.png?w=600&#038;h=122" alt="" width="600" height="122" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/share2010.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/share2010.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/share2010.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/share2010.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/share2010.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/share2010.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/share2010.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/share2010.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/share2010.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/share2010.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/share2010.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/share2010.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/share2010.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/share2010.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=share2010.wordpress.com&amp;blog=10913187&amp;post=49&amp;subd=share2010&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://share2010.wordpress.com/2010/02/25/update-sppersistedobject-in-spproxyoperation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9b3df46eb449fc7733f6ecd1cf7d41fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">huzlibuzli</media:title>
		</media:content>

		<media:content url="http://share2010.files.wordpress.com/2010/02/isppersistedstoreproviderusage.png" medium="image">
			<media:title type="html">ISPPersistedStoreProviderUsage</media:title>
		</media:content>
	</item>
		<item>
		<title>Sandboxed Solutions die ersten Schritte</title>
		<link>http://share2010.wordpress.com/2010/02/04/sandbox-solution-die-ersten-schritte/</link>
		<comments>http://share2010.wordpress.com/2010/02/04/sandbox-solution-die-ersten-schritte/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 10:24:10 +0000</pubDate>
		<dc:creator>huzlibuzli</dc:creator>
				<category><![CDATA[Sandboxed Solutions]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[Domain Controller]]></category>
		<category><![CDATA[SPUCWorkerProcess]]></category>

		<guid isPermaLink="false">http://share2010.wordpress.com/?p=12</guid>
		<description><![CDATA[Der SPUCWorkerProcess bildet das technische Herz einer jeden Sandboxed Solution, da er die Ausführung des Sanboxed Codes übernimmt. Was also tun, wenn Visual Studio nicht in der Lage ist sich mit dem Prozess zu verbinden, um zum Beispiel einen sandboxed Webpart zu debuggen? Im ersten Schritt empfiehlt es sich einen Blick in die Zentraladministration zu werfen. In der Rubrik &#8220;Services on Server&#8220; sollte der Dienst &#8220;Microsoft SharePoint Foundation User Code Service&#8220; gestartet sein. Danach sollten die drei Prozesse  SPUCHostService.exe, SPUCWorkerProcessProxy.exe und SPUCWorkerProcess.exe stabil laufen. In meinem Fall starb der SPUCWorkerProcessProxy in einem Intervall von ca. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=share2010.wordpress.com&amp;blog=10913187&amp;post=12&amp;subd=share2010&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><a href="http://share2010.files.wordpress.com/2010/02/services1.png"></a></p>
<p lang="de">Der SPUCWorkerProcess bildet das technische Herz einer jeden Sandboxed Solution, da er die Ausführung des Sanboxed Codes übernimmt. Was also tun, wenn Visual Studio nicht in der Lage ist sich mit dem Prozess zu verbinden, um zum Beispiel einen sandboxed Webpart zu debuggen?</p>
<p lang="de">Im ersten Schritt empfiehlt es sich einen Blick in die Zentraladministration zu werfen. In der Rubrik &#8220;Services on Server&#8220; sollte der Dienst &#8220;Microsoft SharePoint Foundation User Code Service&#8220; gestartet sein.</p>
<p lang="de"><img class="size-full wp-image-15 aligncenter" style="border-bottom:gray 2px solid;border-right:gray 2px solid;border-top:lightgray 1px solid;border-left:lightgray 1px solid;" title="Services" src="http://share2010.files.wordpress.com/2010/02/services1.png?w=600" alt="Microsoft SharePoint Foundation User Code Service"   /></p>
<p lang="de">Danach sollten die drei Prozesse  SPUCHostService.exe, SPUCWorkerProcessProxy.exe und SPUCWorkerProcess.exe stabil laufen. In meinem Fall starb der SPUCWorkerProcessProxy in einem Intervall von ca. 30 Sekunden und der SPUCWorkerProcess kam nie zur Ausführung.</p>
<p lang="de">Dieses Verhalten begründet sich in der Tatsache, dass meine Entwicklungsmaschine nebenbei auch noch die <strong>Domain Controller</strong> Rolle inne hat. In dieser Konstellation wird Usern, also auch dem Account mit dem die Sandbox Prozesse ausgeführt werden, das Recht entzogen auf den <em>ComputerName</em> Schlüssel in der Registry zuzugreifen. Die Installationsanleitung für SP2010 Beta von <a href="http://blogs.msdn.com/opal/archive/2009/11/16/installation-notice-for-sharepoint-2010-public-beta.aspx">Jie Li</a> enthält unter Punkt 10 ein PowerShell Script mit dem der &#8222;Users&#8220; Gruppe das <a href="http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.registryrights.aspx">&#8222;full control&#8220;</a> Recht für diesen Schlüssel zugewiesen wird.</p>
<p><pre class="brush: powershell;">
$acl = Get-Acl HKLM:\System\CurrentControlSet\Control\ComputerName
$person = [System.Security.Principal.NTAccount]&quot;Users&quot;
$access = [System.Security.AccessControl.RegistryRights]::FullControl
$inheritance = [System.Security.AccessControl.InheritanceFlags]&quot;ContainerInherit, ObjectInherit&quot;
$propagation = [System.Security.AccessControl.PropagationFlags]::None
$type = [System.Security.AccessControl.AccessControlType]::Allow
$rule = New-Object System.Security.AccessControl.RegistryAccessRule($person, $access, $inheritance, $propagation, $type)
$acl.AddAccessRule($rule)
Set-Acl HKLM:\System\CurrentControlSet\Control\ComputerName $acl
</pre></p>
<p>Nach dem Ausführen des Scripts sollte das System neu gestartet werden. Siehe da, alle SPUC* Prozesse laufen stabil und es kann munter los gehen mit der Entwicklung der ersten Sandboxed Webparts. Hallo Welt etc.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/share2010.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/share2010.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/share2010.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/share2010.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/share2010.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/share2010.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/share2010.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/share2010.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/share2010.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/share2010.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/share2010.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/share2010.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/share2010.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/share2010.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=share2010.wordpress.com&amp;blog=10913187&amp;post=12&amp;subd=share2010&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://share2010.wordpress.com/2010/02/04/sandbox-solution-die-ersten-schritte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9b3df46eb449fc7733f6ecd1cf7d41fb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">huzlibuzli</media:title>
		</media:content>

		<media:content url="http://share2010.files.wordpress.com/2010/02/services1.png" medium="image">
			<media:title type="html">Services</media:title>
		</media:content>
	</item>
	</channel>
</rss>
