2008年3月26日 星期三

TransactionScope 之 timeout

發生了在 TransactionScope 內的 transaction timeout Type : System.Transactions.TransactionException, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Message : The operation is not valid for the state of the transaction. Source : System.Transactions inner exception : Type : System.TimeoutException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Message : Transaction Timeout 解法一:TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TimeSpane(0, 5, 0)) //五分鐘。預設是一分鐘。 解法二:

2008年3月24日 星期一

Office 2007 轉存 PDF

之前,在 Office 2003 以前,要將 Word, Excel 轉存成 pdf,大概要買 Arcobat PDF 吧。 現在,在 Office 2007,可以安裝2007 Microsoft Office 增益集:Microsoft 另存 PDF 檔 是不用錢的。 PS: 原本Office 2007預設就附,後來被原廠抗議(因為會害它少了一筆收入),因此改成另外下載。

2008年3月21日 星期五

Windows integration WCF config settings

在使用WCF 之Windows 整合驗證時,一直發生問題。也很難解決 後來,原來是設定問題。拿掉下面的 proxyCredentialType 就好了。 到現在,我還是弄不懂 proxyCredentialType 是什麼意思。 <system.serviceModel> <bindings> <basicHttpBinding> <binding name="basicBinding"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows" proxyCredentialType="Windows" /> </security> </binding> </basicHttpBinding> </bindings>

2008年3月20日 星期四

此服務的安全性設定需要 Windows 驗證,但裝載此服務的 IIS 應用程式未啟用該驗證

在本機(Vista) 開發 WCF程式 ok 後,部署到 windows server 2003 後,存取 http://server/virdir/service.svc時 發生錯誤 此服務的安全性設定需要 Windows 驗證,但裝載此服務的 IIS 應用程式未啟用該驗證。 堆疊追蹤: [NotSupportedException: 此服務的安全性設定需要 Windows 驗證,但裝載此服務的 IIS 應用程式未啟用該驗證。] System.ServiceModel.Channels.HttpChannelListener.ApplyHostedContext(VirtualPathExtension virtualPathExtension, Boolean isMetadataListener) +4074379 System.ServiceModel.Activation.VirtualPathExtension.ApplyHostedContext(TransportChannelListener listener, BindingContext context) +71 ... 不知道該怎麼辦? 英文的字是這樣寫的 Security settings for this service require Windows Authentication but it isnot enabled for the IIS application that hosts this service 經google 大師指點後,查到 http://blogs.msdn.com/appsec/ in this case you will need to set windows authentication and change the iis metabase manualy On your IIS server, start Notepad, and then open the \system32\inetsrv\Metabase.xml file located on the hard disk. In the section, locate the following line: NTAuthenticationProviders="NTLM" Modify the line so that it reads exactly as follows: NTAuthenticationProviders="Negotiate,NTLM" Check also the attribute of the solution vdir at the metabse.xml. 但好像還是不夠啊!

2008年2月22日 星期五

db_owner 與 database owner

到今天才發現 db_owner 與 database owner 是不一樣的。 當權限設計的比較複雜時,一般人就沒有 sysadmin 的權限了。 今天有個 database 名為 myDB。為了工作方便,加入 Acc1到該資料庫的 db_owner 角色。 這樣,Acc1可以作很多事情,但就是不能 restore database 查MSDN,發現誰可以 restore database 呢? 必須有 server level 之 sysadmin 或 dbcreater的角色。或者剛好是該 database 之 database owner. 這才發現 db_owner 與 database owner 是不一樣的。

2008年2月20日 星期三

fire stored procedure and forget

程式撰寫時,有時需要在 aspx 上執行 stored procedure。 但有個 stored procedure 要執行很久,且使用者不太想等太久。那怎辦?

Ado.net 好像沒有一個 ExecuteNoneQueryWithoutWaiting 的指令哦!

�好,SQL Server 2005 有一些功能。

建立一個Job,讓�Job 跑此stored procedure做為第一個 step。 再以 ado.net 執行此 stored procedure 即可。

EXEC msdb.dbo.sp_start_job @job_name = 'JobName'

2008年2月15日 星期五

Could not find a base address that matches scheme https for the endpoint with binding WSHttpBinding. Registered base address schemes are [http]

使用wcf的過程中,一直出現Could not find a base address that matches scheme https for the endpoint with binding WSHttpBinding. Registered base address schemes are [http]. 的錯誤。

奇怪的是,我是使用 http://localhost/service/service.svc 來測試的,為何一直有 https 的出現呢?

設定如下:

<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WindowsBinding">
<security mode="Transport">
<transport clientCredentialType="Windows" proxyCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="IssueTracking.IssueServiceBehavior">
<serviceMetadata httpGetEnabled="true"
httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<windowsAuthentication includeWindowsGroups="true" allowAnonymousLogons="false" />
</serviceCredentials>
<serviceAuthorization />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="IssueTracking.IssueServiceBehavior"
name="IssueTracking.IssueService">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="WindowsBinding"
contract="IssueTracking.IIssueService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>

後來,google 了很久,才漸漸覺的,這是微軟的設計。因為 web service 是不安全的,因此會要求走 SSL。

因此,改走 basciHttpBinding ,並改成<security mode="TransportCredentialOnly">


<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="IssueTracking.IssueServiceBehavior">
<serviceMetadata httpGetEnabled="true"
httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<windowsAuthentication includeWindowsGroups="true" allowAnonymousLogons="false" />
</serviceCredentials>
<serviceAuthorization />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="IssueTracking.IssueServiceBehavior"
name="IssueTracking.IssueService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicBinding"
contract="IssueTracking.IIssueService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>

就ok 了

Share with Facebook