SharePoint リストの追加/更新/削除イベントをリッスンする SharePoint 2010 イベント レシーバーがあります。イベントが発生すると、C# で記述されたイベント レシーバーは、これらのイベントを Java プログラムに渡す必要があります。私のコードは以下に掲載されています。受信機を正常に展開でき、動作します。必要なすべての SharePoint イベントを取得します。今私の問題は、これらのイベントを Java に渡すことです。ソケットを開こうとしたり、SharePoint イベントをファイルに書き込もうとしたりするたびに、セキュリティ例外が発生します。たとえば、以下に投稿した ItemDeleting メソッドを見てください。このメソッドは、アイテムが SharePoint リストから削除されるたびに起動します。Java へのソケットを開こうとすると、System.Net.DnsPermission 例外が発生します。ソケットを開かずにファイルに書き込もうとすると、System.Security.Permissions.FileIOPermission 例外が発生します。
フォーラムを見回して、トラブルシューティングのためにいくつかのことを試しました。まず、SharePoint の web.xml で trust level="Full" を設定します。次に、アセンブリの DeploymentTarget="GlobalAssemblyCache" を設定します。これは役に立ちません。他に何ができますか?ご回答ありがとうございます。
私のイベントレシーバーコード:
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
using System.Net.Sockets;
using System.IO;
namespace EventReceiverTest
{
public class EventReceiver1 : SPItemEventReceiver
{
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
}
public override void ItemUpdating(SPItemEventProperties properties)
{
base.ItemUpdating(properties);
}
public override void ItemDeleting(SPItemEventProperties properties)
{
//can't open a socket connection.Request for the permission of type 'System.Net.DnsPermission,... failed
TcpClient tc = new TcpClient("192.168.xxx.xxx", xxx);
Console.WriteLine("Server invoked");
NetworkStream ns = tc.GetStream();
StreamWriter sw = new StreamWriter(ns);
sw.WriteLine("item deleted");
sw.Flush();
StreamReader sr = new StreamReader(ns);
Console.WriteLine(sr.ReadLine());
//can't write to file. Request for the permission of type 'System.Security.Permissions.FileIOPermission,...failed
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\logs\\test.txt");
file.WriteLine("item deleted " + properties.ListItem);
//can't output anything to a console
Console.Out.WriteLine("deleting an item ");
base.ItemDeleting(properties);
//but this part works
properties.Status = SPEventReceiverStatus.CancelWithError;
properties.ErrorMessage = "Deleting items from " + properties.RelativeWebUrl + " is not supported.";
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
<Properties>
<Property Key="GloballyAvailable" Value="true" />
</Properties>
</Feature>
<?xml version="1.0" encoding="utf-8"?>
<Solution xmlns="http://schemas.microsoft.com/sharepoint/">
<Assemblies>
<Assembly Location="EventReceiver3.dll" DeploymentTarget="GlobalAssemblyCache" />
</Assemblies>
<FeatureManifests>
<FeatureManifest Location="EventReceiver3_Feature1\Feature.xml" />
</FeatureManifests>
</Solution>