views:

1024

answers:

5

Does anyone using the Twitterizer framework have any experience running it in a Medium Trust environment? I keep getting security exceptions...

Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.

Exception Details: System.Security.SecurityException: That assembly does not allow partially trusted callers.

+2  A: 

I was using this with GoDaddy and had to find an alternative hosting company, discount asp.net...

I'm pretty sure the issue with Twitterizer is that you need to be able to have reflection work in order for the assembly to identify what operations are possible. Medium trust does not allow reflection to work.

RSolberg
yeah, i'm on godaddy... so no way around it eh?
Jason
I couldn't find one. GoDaddy causes huge issues with this medium trust stuff...
RSolberg
http://stackoverflow.com/questions/805255/godaddy-hosting-medium-trust-workaround Jon's suggestion wasn't bad, but didn't work with GoDaddy which is really why I moved...
RSolberg
is there any other assembly i could use other than twitterizer that has the same ease of use/functionality? also, what makes something unusable in medium trust?
Jason
I know of some people who have been able to use Twitter feeds purely on the client side with JSON.
RSolberg
all i want to do is make a single post from my website once a day. with twitterizer it was SO easy.... any other way you can think of?
Jason
there are other .net twitter api's out there... I still use twitterizer on my site. I believe you can use client side code to do the post as well, just haven't tried it...
RSolberg
+1  A: 

No way with godaddy, check what they are saying on their website:

What Is Medium trust level and how does it affect my hosting account?

so you have just 2 ways:

  • Change Twitterizer trust mode.

OR

  • Check another hosting company.

More about ASP.NET Trust Levels

Amr ElGarhy
ok... so how does this affect me? what is it about medium trust that is preventing me from using twitterizer? what does twitterizer require?
Jason
how do i change twitterizer trust mode?
Jason
its reflection... medium trust does not allow reflection to work.
RSolberg
check the link i sent in godaddy website, you will know in details how medium trust affect your hosting, but i don't know about Twitterizer, i just faced the same problem with another website "KIGG".
Amr ElGarhy
reflection?? i don't even know what that is, let alone use it... oy...
Jason
You can change from the web.config, but i think this will not solve the problem because some of Twitterizer code will need the Full or High trust level, and will not work in Medium. in my case it was dotnetopenId library and special code using ADO.net entity framework
Amr ElGarhy
check this http://stackoverflow.com/search?q=Medium+Trust may be you find others have a workaround.
Amr ElGarhy
+1  A: 

I am working on modifying and testing Twitterizer to work in medium trust and will test on my GoDaddy hosting.

If you run into specific issues, don't hesitate to create an issue ticket or email our google group.

-Ricky (Owner of the Twitterizer library)

Ricky Smith
actually, i was the one who created the ticket in the google group. last i checked, you guys actually fixed it!
Jason
Well, somehow it got UNfixed. I've re-fixed it, tested it, and am posting what settings are required to get it working in a medium trust environment.Specifically, add this to the web.config inside <system.web>:<trust level="Medium" originUrl="https?://(www\.)?twitter.com/.+"/>
Ricky Smith
Any updates on this? The originUrl setting doesn't work...
Druid
Hit me up on the mailing list with some more information. Everything I've seen indicates that it works, so I'd love some help figuring it out.
Ricky Smith
A: 

It works on godaddy.com standard Windows accounts. A more readable source is here.

Default.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"
         Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtSendTweet" runat="server"
                     style="margin-bottom: 0px" Width="396px"></asp:TextBox>
        <br />
        <asp:Button ID="cmdSendTweet" runat="server" Text="Send Tweet" />

    </div>
    </form>
</body>
</html>

Code behind:

Imports Twitterizer.Framework
Imports System.Configuration
Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim TwitterUserName As String = ConfigurationManager.AppSettings.Get("TwitterUserName")
        Dim TwitterPassWord As String = ConfigurationManager.AppSettings.Get("TwitterPassWord")

        Dim twit As Twitter = Nothing
        twit = New Twitter(TwitterUserName, TwitterPassWord, "Web")
        Dim followers As TwitterUserCollection = twit.User.Followers()

        For Each follower As TwitterUser In followers
            Response.Write(follower.ScreenName.ToString())
            Response.Write(follower.Status.Text.ToString())
            Response.Write(follower.NumberOfFollowers.ToString())
        Next
        Dim paras As New TwitterParameters()
        paras.Add(TwitterParameterNames.ScreenName, "Twit_er_izer")
        paras.Add(TwitterParameterNames.Since, Convert.ToDateTime("1/1/2009"))
        paras.Add(TwitterParameterNames.Page, 1)
        paras.Add(TwitterParameterNames.Count, 5)
        paras.Add(TwitterParameterNames.SinceID, 1)

        Dim usersStatus As TwitterStatusCollection = twit.Status.UserTimeline(paras)

        Response.Write("Other User")
        For Each status As TwitterStatus In usersStatus
            Response.Write(String.Format("User {0}: {1}", status.TwitterUser.ScreenName, status.Text))
            Response.Write("<br><p>")
        Next


    End Sub
    Protected Sub cmdSendTweet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdSendTweet.Click
        Dim TwitterUserName As String = ConfigurationManager.AppSettings.Get("TwitterUserName")
        Dim TwitterPassWord As String = ConfigurationManager.AppSettings.Get("TwitterPassWord")
        Dim TwitterMessage As String = txtSendTweet.Text
        Dim t As New Twitterizer.Framework.Twitter(TwitterUserName, TwitterPassWord)
        t.Status.Update(txtSendTweet.Text)
        Dispose()
    End Sub
End Class

Web.config:

<?xml version="1.0"?>
<!-- 
    Note: As an alternative to hand editing this file you can use the 
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments usually located in 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration>
 <configSections>
  <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
     <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
     <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
     <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
     <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    </sectionGroup>
   </sectionGroup>
  </sectionGroup>
 </configSections>
 <appSettings>
  <add key="TwitterUserName" value="thesupermedia" />
  <add key="TwitterPassWord" value="yourpassword" />
 </appSettings>
 <connectionStrings/>
 <system.web>
  <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.

            Visual Basic options:
            Set strict="true" to disallow all data type conversions 
            where data loss can occur. 
            Set explicit="true" to force declaration of all variables.
        -->
  <authentication mode="Forms" />
  <customErrors defaultRedirect="" />
  <compilation debug="false" strict="false" explicit="true">
   <assemblies>
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
   </assemblies>
  </compilation>
  <pages>
   <namespaces>
    <clear/>
    <add namespace="System"/>
    <add namespace="System.Collections"/>
    <add namespace="System.Collections.Generic"/>
    <add namespace="System.Collections.Specialized"/>
    <add namespace="System.Configuration"/>
    <add namespace="System.Text"/>
    <add namespace="System.Text.RegularExpressions"/>
    <add namespace="System.Linq"/>
    <add namespace="System.Xml.Linq"/>
    <add namespace="System.Web"/>
    <add namespace="System.Web.Caching"/>
    <add namespace="System.Web.SessionState"/>
    <add namespace="System.Web.Security"/>
    <add namespace="System.Web.Profile"/>
    <add namespace="System.Web.UI"/>
    <add namespace="System.Web.UI.WebControls"/>
    <add namespace="System.Web.UI.WebControls.WebParts"/>
    <add namespace="System.Web.UI.HtmlControls"/>
   </namespaces>
   <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   </controls>
  </pages>
  <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
       <authentication mode="Windows"/>
        -->

  <!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
  <httpHandlers>
   <remove verb="*" path="*.asmx"/>
   <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
  </httpHandlers>
  <httpModules>
   <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </httpModules>
 </system.web>
 <system.codedom>
  <compilers>
   <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="WarnAsError" value="false"/>
   </compiler>
   <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="OptionInfer" value="true"/>
    <providerOption name="WarnAsError" value="false"/>
   </compiler>
  </compilers>
 </system.codedom>
 <!-- 
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
 <system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
   <remove name="ScriptModule"/>
   <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </modules>
  <handlers>
   <remove name="WebServiceHandlerFactory-Integrated"/>
   <remove name="ScriptHandlerFactory"/>
   <remove name="ScriptHandlerFactoryAppServices"/>
   <remove name="ScriptResource"/>
   <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </handlers>
 </system.webServer>
 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   </dependentAssembly>
   <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   </dependentAssembly>
  </assemblyBinding>
 </runtime>
</configuration>
DaveCS
A: 

Its Work on godaddy. Send me the you are getting.

Pankaj